【问题标题】:JSF (PrimeFaces) page doesn't work with single formJSF(PrimeFaces)页面不适用于单一表单
【发布时间】:2014-04-02 11:50:28
【问题描述】:

我正在使用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>

我的问题是:为什么第一个代码不起作用 - 刷新 java bean 中列表的方法 projectMB.refreshProjectList 永远不会被调用。我在 javascript 和 java 中没有收到任何错误。

【问题讨论】:

  • 像往常一样,“它不起作用”是对问题的非常模糊的描述。您还应该提供一个最小的示例,在 99% 的情况下,您可以在不发布整个代码墙的情况下复制问题,这对读者来说是一种噪音。
  • @Łukasz웃Lツ 我认为“永远不会调用在 java bean 中刷新列表的方法 projectMB.refreshProjectList”这句话解释了问题所在。
  • 您单击按钮,没有任何反应,日志中绝对没有消息,javascript控制台中也没有请求或错误消息?如果删除数据表会发生什么?我做了一个最小的例子,有 2 个按钮 - 一个调用服务器方法,第二个打开对话框。该对话框采用相同的形式。一切运行顺利。
  • 好吧,我不是在寻找解决方案。正如我发布的那样,我已经找到了一个(添加其他表格)。我想知道为什么第一个代码不起作用,而第二个代码起作用。 java代码中没有错误,javascript控制台中没有日志。 Emil Kaminski 指出帖子中有人解释说对话框可以放在 DOM 树中的任何位置,但我想知道为什么。

标签: java jsf primefaces xhtml


【解决方案1】:

这是表单中的对话框非常常见的问题,如果您搜索一下这个问题,您可以轻松找到答案。

但也许这个答案可以进一步帮助你:

Proper Construct for Primefaces Dialog

【讨论】:

  • 我看到一个对话框可以放在DOM树的任何地方,但是为什么呢?我认为标签定义了生成的html的哪个部分应该包含什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2019-12-01
  • 2022-01-18
  • 2011-12-08
相关资源
最近更新 更多