嗨,我一直在用这个问题打我的脑袋,我不知道该怎么办,我希望这个论坛有人可以帮助我。
当我使用dataTable元素呈现独立页面时,所有Ajax功能都可以工作:排序,导航等。
但是当我通过" ui:include"在同一页面中将dataTable元素包含在另一个页面中时tag,表呈现但是所有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中的错误?
答案 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。