2014-01-25 3 views
0

저는 선택한 행의 세부 정보가있는 대화 상자를 팝업하는 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()} 바인딩에 의해 전달 된 것처럼 비어 있습니다.

데이터 테이블과 대화 상자 모두 동일한 태그 내에 있습니다.

이 문제의 원인은 무엇입니까?

+0

BTW, 빈이 – hurleytom

+0

을 @ViewScoped되어 나는 또한 해봤 <시간을 :이 outputText 값 = "# {userDAO.selectedComplaintRow.forename}"/> 같은 결과 . – hurleytom

+0

setSelectedComplaintRow() 메서드가 전혀 호출되지 않았습니까? h : form 태그는 어디에 있습니까? – scraatz

답변

0

이 @scraatz 제안하고 아래 rowSelect 아약스 이벤트에 update=":form:dialog"을 추가로 내가 한이 문제를 해결하려면

이 데이터를 반면이없이, 자신에게 전달 된 후 대화 상자를 업데이트 나타납니다
<p:ajax event="rowSelect" listener="#{bigComplaintsDAO.onRowSelect}" 
    update=":form:ComplaintTable, :form:messages, :form:dialog" 
    oncomplete="PF('showComplaint').show()" /> 

, 대화 상자는 데이터가 전달되기 전에로드되고 이후에 데이터가 #{userDAO.selectedComplaintRow.forename}에 전달 될 때 업데이트되지 않습니다.

관련 문제