2013-08-15 4 views
0

У меня есть повтор ui, который содержит пары входного текста и команды. Кнопка просто изменяет значение, которое отображает входной текст и повторно отображает его. На первой кнопке щелчок меняет значение, но не отображает его на экране. Второй клик делает то же самое, но успешно повторно отображает элемент управления. Onevent запускает все 3 события статуса просто отлично. В журналах ничего не отображается. Проблема кажется серверной, но я использую настройку лиц по умолчанию из netbeans 7.3.1.JSF2 ui: repeat inputText wont re-render при первой попытке

В приведенном ниже коде будут отображаться 4 строки вводаValue и кнопок. Первая отлично работает (его пределами Ui:. Повторяю 3 ниже всего требуется 2 щелчки

TestBean.java

@ManagedBean 
@ViewScoped 
public class TestBean implements Serializable { 
    private MyObject nc; 
    private List<MyObject> list; 

    public TestBean() { 
     nc = null; 
     list = new ArrayList<MyObject>(); 
    } 

    public MyObject getNc() { 
     return nc; 
    } 

    public void setNc(MyObject nc) { 
     this.nc = nc; 
    } 

    public List<MyObject> getList() { 
     return list; 
    } 

    public void setList(List<MyObject> list) { 
     this.list = list; 
    } 

    @PostConstruct 
    public void onInit() { 
     MyObject nc1 = new MyObject(); 
     nc1.setText("1"); 
     list.add(nc1); 
     MyObject nc2 = new MyObject(); 
     nc2.setText("2"); 
     list.add(nc2); 
     MyObject nc3 = new MyObject(); 
     nc3.setText("3"); 
     list.add(nc3); 

     MyObject nc0 = new MyObject(); 
     nc0.setText("0"); 
     nc = nc0; 
    } 
} 

MyObject.java

public class MyObject implements Serializable { 
    public String text; 

    public MyObject() { 
     this.text = ""; 
    } 

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

    public void testMethod() { 
     text = "HEY"; 
    } 
} 

index.xhtml

.
<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:f="http://java.sun.com/jsf/core"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     Hello from Facelets<br /> 
     <h:form> 
      <h:inputText id="text" readonly="true" value="#{testBean.nc.text}" /> 
        <h:commandButton value="test"> 
         <f:ajax listener="#{testBean.nc.testMethod()}" execute="text" render="text" /> 
        </h:commandButton><br /><hr /> 

      <ui:repeat value="#{testBean.list}" var="cur"> 
       <h:panelGroup id="viewTest"> 
        <h:inputText id="text" readonly="true" value="#{cur.text}" /> 
       </h:panelGroup> 

        <h:commandButton value="test"> 
         <f:ajax listener="#{cur.testMethod()}" render="viewTest" immediate="true" /> 
        </h:commandButton><br /> 

      </ui:repeat> 
     </h:form> 

    </h:body> 
</html> 
+0

Ive заменил ui: повторите с h: datatable, который, кажется, работает. Ид хотел бы выяснить, что я сделал неправильно. Любое понимание поможет :) – user2687211

ответ

0

Я понял это. Как только я изменил .testMethod() на .testMethod (AjaxBehaviorEvent ae), он работает при первом щелчке , По-видимому, они по-разному трактуются JSF. Надеюсь, что кто-то другой узнает из моей ошибки.