저는 선택한 행의 세부 정보가있는 대화 상자를 팝업하는 PrimeFaces 4 데이터 테이블에 즉시 행 선택을 구현하려고합니다.outputText가 뒷받침 빈 메서드를 호출하지 않습니다.
관련 코드 단편은 :
데이터 테이블 :
<p:dataTable id="Table"
var="user" rowKey="#{user.id}"
selection="#{userDAO.selectedComplaintRow}"
selectionMode="single" value="#{userDAO.complaintList}"
style="font-size:10px;">
<p:ajax event="rowSelect" listener="#{userDAO.onRowSelect}"
update=":form:Table, :form:messages"
oncomplete="PF('showComplaint').show()" />
...
대화 :
<p:dialog header="Details" widgetVar="showComplaint"
id="dialog" resizable="false" width="400" showEffect="explode"
modal="true" hideEffect="explode">
<h:panelGrid columns="3" cellpadding="5">
<h:outputText value="Forename: " />
<h:outputText value="#{userDAO.selectedComplaintRow.getForename()}" />
</h:panelGrid>
</p:dialog>
UserDAO.onRowSelect()
public void onRowSelect(SelectEvent event) {
FacesMessage msg = new FacesMessage("User Selected", "Selected!");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
UserDAO 게터와 세터 :
public void setSelectedComplaintRow(User selectedComplaintRow) {
this.selectedComplaintRow = selectedComplaintRow;
System.out.println("Passed forename: " + this.selectedComplaintRow.getForename());
}
public User getSelectedComplaintRow() {
System.out.println("Retrieved forename: " + this.selectedComplaintRow.getForename());
return this.selectedComplaintRow;
}
사용자 getter 및 setter :
public String getForename() {
return this.forename;
}
public void setForename(String forename) {
this.forename = forename;
}
대화 상자가 열릴 때 (오래된 학교) System.out.println()
은 사용자 엔티티 빈과 이클립스 콘솔에 인쇄가에서 성공적으로 뒤따라야를 얻을 수 있지만, "Forename :"오른쪽의 공백은 null이 #{userDAO.selectedComplaintRow.getForename()}
바인딩에 의해 전달 된 것처럼 비어 있습니다.
데이터 테이블과 대화 상자 모두 동일한 태그 내에 있습니다.
이 문제의 원인은 무엇입니까?
BTW, 빈이 – hurleytom
을 @ViewScoped되어 나는 또한 해봤 <시간을 :이 outputText 값 = "# {userDAO.selectedComplaintRow.forename}"/> 같은 결과 . – hurleytom
setSelectedComplaintRow() 메서드가 전혀 호출되지 않았습니까? h : form 태그는 어디에 있습니까? – scraatz