입력 텍스트와 명령 단추 쌍이 포함 된 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>
Ive는 ui : repeat 대신 h : datatable를 사용합니다. Id는 어떤 일이 잘못되었는지 알아 내려고합니다. 모든 통찰력이 도움이 될 것입니다 :) – user2687211