2013-08-15 2 views
0

입력 텍스트와 명령 단추 쌍이 포함 된 UI 반복이 있습니다. 버튼은 입력 텍스트가 표시하고 다시 렌더링하는 값을 변경합니다. 첫 번째 단추를 클릭하면 값이 변경되지만 화면에서는 다시 렌더링되지 않습니다. 두 번째 클릭은 동일하지만 성공적으로 컨트롤을 렌더링합니다. Onevent는 3 가지 상태 이벤트를 모두 정상적으로 트리거합니다. 로그에 아무것도 표시되지 않습니다. 문제는 서버 측처럼 보이지만 netbeans 7.3.1의 기본 얼굴 설정을 사용하고 있습니다.JSF2 UI : repeat inputText가 첫 번째 시도에서 다시 렌더링되지 않음

아래 코드는 inputValue 및 버튼의 4 줄을 표시합니다. 첫 번째는 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 : repeat 대신 h : datatable를 사용합니다. Id는 어떤 일이 잘못되었는지 알아 내려고합니다. 모든 통찰력이 도움이 될 것입니다 :) – user2687211

답변

0

.testMethod()를 .testMethod (AjaxBehaviorEvent ae)로 변경하면 첫 번째 클릭에서 작동합니다. . 외관상으로는 그들은 JSF에 다르게 대우된다. 누군가가 내 실수에서 배울 수 있기를 바랍니다.

관련 문제