我正在開發使用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中遇到任何錯誤。
像往常一樣,「它不工作」是一個問題的一個非常模糊的描述。您還應該提供一個最簡單的例子,在99%的情況下,您可以複製問題而無需發佈整面代碼,這對讀者來說是一種噪音。 –
@Łukasz웃Lツ我認爲句子「刷新java bean中的列表的方法projectMB.refreshProjectList永遠不會被調用」解釋了什麼是問題。 – gawi
您點擊按鈕,沒有任何反應,日誌中絕對沒有消息,並且在javascript控制檯中沒有請求或錯誤消息?如果刪除數據表會發生什麼?我做了一個最小的例子,有2個按鈕 - 一個調用服務器方法,第二個打開對話框。該對話框的形式相同。一切運作順利。 –