Primefaces dataTable ajax功能在包含在<ui:include tag =“”> </ui:include>中时制动

时间:2012-06-18 20:16:23

标签: java jsf

嗨,我一直在用这个问题打我的脑袋,我不知道该怎么办,我希望这个论坛有人可以帮助我。

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

但是当我通过&#34; ui:include&#34;在同一页面中将dataTable元素包含在另一个页面中时tag,表呈现但是所有Ajax功能都丢失了。

以下是我的&#34; p:dataTable&#34;的代码。页:

    <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中的错误?

1 个答案:

答案 0 :(得分:2)

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

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

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

另见: