您好,我一整天都在为这个问题而烦恼,我不知道该怎么办,我希望这个论坛中的人可以帮助我。
当我使用 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 中的错误?
<ui:include src="#{navigationBean.pageName}.xhtml" />
你需要确保#{navigationBean.pageName}
回报一模一样处理(ajax)表单提交期间的值与显示初始页面时一样。如果不是这种情况,那么 JSF 将无法找到 (ajax) 表单提交中涉及的输入和命令组件。
因此,如果该值取决于基于请求的参数/变量,那么您需要确保该请求参数/变量在表单提交期间保留并在 bean 的(后)构造期间可用。您可以通过将其传递为来实现这一点<f:param>
在命令按钮中并将其设置为@ManagedProperty
。请注意,将 bean 放置在视图范围内不会像<ui:include src>
作为视图构建时间标签,它拥有自己的全新实例。您需要关闭部分状态保存或升级到 JSF 2.2。
也可以看看:
- 如何通过导航菜单ajax刷新动态包含内容? (JSF SPA) https://stackoverflow.com/questions/7108668/how-to-ajax-refresh-the-main-content-part-by-navigation-menu/7113961#7113961
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)