3

嗨,我整天都在为这个问题打我的头,我不知道该怎么办,我希望这个论坛上的人可以帮助我。

当我使用 dataTable 元素呈现独立页面时,所有 Ajax 功能都可以工作:排序、导航等。

但是,当我通过“ui:include”标签在另一个页面中包含具有 dataTable 元素的同一页面时,表格会呈现,但所有 Ajax 功能都会丢失。

这是我的“p:dataTable”页面的代码:

    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets">
        <p:dataTable id="dataTable"
                     var="alarm" 
                     value="#{alarmsBean.alarms}"
                     paginator="true" rows="10"
                     paginatorTemplate="{FirstPageLink} {PreviousPageLink} {NextPageLink} {LastPageLink}"
                     paginatorPosition="bottom">
            <f:facet name="header">
                Alarms
            </f:facet>
            <p:column id="deviceHeader" sortBy="#{alarm.device}">
                <f:facet name="header">
                    <h:outputText value="Device" />
                </f:facet>
                <h:outputText value="#{alarm.device}" />
            </p:column>
            <p:column sortBy="#{alarm.alarm}">
                <f:facet name="header">
                    <h:outputText value="Alarm" />
                </f:facet>
                <h:outputText value="#{alarm.alarm}" />
            </p:column>            
            <p:column sortBy="#{alarm.managedObject}">
                <f:facet name="header">
                    <h:outputText value="Managed Object" />
                </f:facet>
                <h:outputText value="#{alarm.managedObject}" />
            </p:column>            
            <p:column sortBy="#{alarm.alarmTime}">
                <f:facet name="header">
                    <h:outputText value="Alarm Time" />
                </f:facet>
                <h:outputText value="#{alarm.alarmTime}" />
            </p:column>            
            <p:column sortBy="#{alarm.severity}">
                <f:facet name="header">
                    <h:outputText value="Severity" />
                </f:facet>
                <h:outputText value="#{alarm.severity}" />
            </p:column>            
            <p:column sortBy="#{alarm.message}">
                <f:facet name="header">
                    <h:outputText value="Message" />
                </f:facet>
                <h:outputText value="#{alarm.message}" />
            </p:column>
        </p:dataTable>
    </ui:composition>

这是包含该页面的其他页面的部分:

    <h:form id="mainF">
      <pe:layoutPane id="center" position="center">
          <h:panelGroup id="centerContent">
              <ui:include src="#{navigationBean.pageName}.xhtml" />
          </h:panelGroup>
      </pe:layoutPane>
    </h:form>

我做错了什么或者这是 PrimeFaces 3.3 中的错误?

4

1 回答 1

2
<ui:include src="#{navigationBean.pageName}.xhtml" />

您需要确保在处理(ajax)表单提交期间#{navigationBean.pageName}返回与显示初始页面时完全相同的值。如果不是这种情况,那么 JSF 将无法找到 (ajax) 表单提交中涉及的输入和命令组件。

因此,如果该值取决于基于请求的参数/变量,那么您需要确保此请求参数/变量在表单提交期间保留并且在 bean 的(后)构造期间可用。您可以通过<f:param>在命令按钮中传递它并将其设置为@ManagedProperty. 请注意,将 bean 放在视图范围内将不起作用,<ui:include src>因为作为视图构建时间标记会获得自己的全新实例。您需要关闭部分状态保存或升级到 JSF 2.2。

也可以看看:

于 2012-06-18T21:43:28.417 回答