2014-04-02 17 views
1

我正在開發使用PrimeFaces,列出的一些項目的信息一個簡單的頁面工作。我想添加一個按鈕,打開一個包含詳細信息的對話框。代碼很簡單。但是它不工作:JSF(PrimeFaces)頁面不具有單一的形式

<h:form id="projectForm"> 
    <p:dataTable id="projectDataTable" var="project" value="#{projectMB.projects}" > 
    <p:column sortBy="name" headerText="Name"> 
     <h:outputText value="#{project.name}" /> 
    </p:column> 
    <p:column sortBy="status" headerText="Status"> 
     <h:outputText value="#{project.status}" /> 
     <h:outputText value=" (#{project.progress}%)" /> 
    </p:column> 
    <p:column style="width:4%"> 
     <p:commandButton update=":projectForm:display" id="selectButton" oncomplete="PF('projectDialog').show()" icon="ui-icon-search" title="View"> 
     <f:setPropertyActionListener value="#{project}" target="#{projectMB.selectedProject}" /> 
     </p:commandButton> 
    </p:column>    
    </p:dataTable> 
    <center> 
    <p:commandButton id="refreshProjectsButton" actionListener="#{projectMB.refreshProjectList}" icon="ui-icon-refresh" update="projectDataTable"/> 
    </center> 

    <p:dialog header="Project Detail" widgetVar="projectDialog" resizable="false" id="projectDlg" showEffect="fade" modal="true"> 
    <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;"> 
     <h:outputText value="Name:" /> 
     <h:outputText value="#{projectMB.selectedProject.name}" style="font-weight:bold"/> 
     <h:outputText value="Description:" /> 
     <h:outputText value="#{projectMB.selectedProject}" style="font-weight:bold"/> 
    </h:panelGrid> 
    </p:dialog> 
</h:form> 

我找到了一個解決方案通過添加額外的形式附上dialog

<h:form id="projectForm"> 
    <p:dataTable id="projectDataTable" var="project" value="#{projectMB.projects}" > 
    <p:column sortBy="name" headerText="Name"> 
     <h:outputText value="#{project.name}" /> 
    </p:column> 
    <p:column sortBy="status" headerText="Status"> 
     <h:outputText value="#{project.status}" /> 
     <h:outputText value=" (#{project.progress}%)" /> 
    </p:column> 
    <p:column style="width:4%"> 
     <p:commandButton update=":projectForm2:display" id="selectButton" oncomplete="PF('projectDialog').show()" icon="ui-icon-search" title="View"> 
     <f:setPropertyActionListener value="#{project}" target="#{projectMB.selectedProject}" /> 
     </p:commandButton> 
    </p:column>    
    </p:dataTable> 
    <center> 
    <p:commandButton id="refreshProjectsButton" actionListener="#{projectMB.refreshProjectList}" icon="ui-icon-refresh" update="projectDataTable"/> 
    </center> 

</h:form> 
<h:form id="projectForm2"> 

    <p:dialog header="Project Detail" widgetVar="projectDialog" resizable="false" id="projectDlg" showEffect="fade" modal="true"> 
    <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;"> 
     <h:outputText value="Name:" /> 
     <h:outputText value="#{projectMB.selectedProject.name}" style="font-weight:bold"/> 
     <h:outputText value="Description:" /> 
     <h:outputText value="#{projectMB.selectedProject}" style="font-weight:bold"/> 
    </h:panelGrid> 
    </p:dialog> 
</h:form> 

我的問題是:爲什麼第一個代碼不工作 - 方法projectMB.refreshProjectList是刷新java bean中的列表永遠不會被調用。我沒有在javascript和java中遇到任何錯誤。

+0

像往常一樣,「它不工作」是一個問題的一個非常模糊的描述。您還應該提供一個最簡單的例子,在99%的情況下,您可以複製問題而無需發佈整面代碼,這對讀者來說是一種噪音。 –

+0

@Łukasz웃Lツ我認爲句子「刷新java bean中的列表的方法projectMB.refreshProjectList永遠不會被調用」解釋了什麼是問題。 – gawi

+0

您點擊按鈕,沒有任何反應,日誌中絕對沒有消息,並且在javascript控制檯中沒有請求或錯誤消息?如果刪除數據表會發生什麼?我做了一個最小的例子,有2個按鈕 - 一個調用服務器方法,第二個打開對話框。該對話框的形式相同。一切運作順利。 –

回答

2

這是表單內部對話框的一個相當常見的問題,如果您對這個問題進行一些搜索,您可以輕鬆找到答案。

但也許這個答案還可以幫助您:

Proper Construct for Primefaces Dialog

+0

我看到一個對話框可以放在DOM樹中的任何地方,但爲什麼?我認爲標籤定義了什麼應該包括在生成的HTML的哪一部分。 – gawi

相關問題