2014-01-25 89 views
0

我試圖在PrimeFaces 4數據表上實現即時行選擇,彈出包含所選行詳細信息的對話框。outputText不調用backing bean方法

相關的代碼片段是:

數據表:

<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()從用戶實體bean,並打印到Eclipse控制檯,成功獲取錄名字的對話框打開時, 「Forename:」右側的空格爲空,就好像null通過#{userDAO.selectedComplaintRow.getForename()}綁定一樣。

數據表和對話框都在相同的標籤內。

什麼可能導致這種情況?

+0

順便說一下,該bean是@ViewScoped – hurleytom

+0

我也試過 具有相同的結果。 – hurleytom

+0

您的setSelectedComplaintRow()方法是否被調用? h:表單標籤在哪裏? – scraatz

回答

0

爲了解決這個我一樣@scraatz建議,並添加update=":form:dialog"爲以下rowSelect AJAX事件:

<p:ajax event="rowSelect" listener="#{bigComplaintsDAO.onRowSelect}" 
    update=":form:ComplaintTable, :form:messages, :form:dialog" 
    oncomplete="PF('showComplaint').show()" /> 

這看似數據已經傳遞給它之後,而沒有這個更新的對話框中,對話框在任何數據傳遞給它之前被加載,並且在數據隨後被#{userDAO.selectedComplaintRow.forename}傳遞給它時不被更新。

相關問題