Java Primefaces dataTable ajax功能包含在a<;用户界面:包含标签/>;

Java Primefaces dataTable ajax功能包含在a<;用户界面:包含标签/>;,java,jsf,Java,Jsf,嗨,我整天都在为这个问题绞尽脑汁,我不知道该怎么办,我希望这个论坛的人能帮助我 当我使用dataTable元素呈现一个独立页面时,所有Ajax功能都可以工作:排序、导航等 但是,当我通过“ui:include”标记将带有dataTable元素的同一页面包含在另一个页面中时,该表将呈现,但所有Ajax功能都将丢失 以下是我的“p:dataTable”页面的代码: 警报 这是另一页中包含该页的部分: <h:form id="mainF"> <pe:layou

嗨,我整天都在为这个问题绞尽脑汁,我不知道该怎么办,我希望这个论坛的人能帮助我

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

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

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


警报
这是另一页中包含该页的部分:

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


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

所以,如果该值依赖于基于请求的参数/变量,那么您需要确保该请求参数/变量在表单提交期间被保留,并且在bean(post)构造期间可用。您可以通过在命令按钮中将其作为
传递,并将其设置为
@ManagedProperty
来实现这一点。请注意,将bean放置在视图范围内不会起作用,因为作为视图构建时标记的
会获得它自己的全新实例。您需要关闭部分状态保存或升级到JSF2.2

另见:

Ajax功能需要有效的表单。显然,表格丢失或损坏了。如果你把
移到
标签里面会怎么样?我已经试过了,但没用。我移动表单如下:哦,等等,我现在看到你在
中使用EL。我已经发布了答案。我还尝试将标签移到ui:include的正上方,但没有成功。我还尝试将标记移到包含页面中dataTable元素的正上方。只要dataTable元素包含在ui:include中,与AJAX相关的任何东西都不起作用。我应该期望RichFaces比PrimeFaces的结果更好吗?似乎我花了无数的时间在应该存在并且应该易于使用的功能上。嗯……当我的数据表已经加载到页面中,我单击导航或排序按钮时,navigationBean.pageName不会改变。该值与数据表显示的持续时间相同。所以,我不认为是这样的,除非我不理解你的解释。嗯……我想你确实了解了一些事情。我在NavibationBean中添加了System.out.prinln以输出pageName。当我最初加载alarms.xhtml页面时,输出为:INFO:/pages/alarms,然而,当我单击导航或排序时,我可以看到导航bean弹出此:/pages/alarms。问题是为什么再次调用它?它是用SessionScoped和ManagedBean注释定义的,所以我认为它不应该在第一次之后输出任何东西-这意味着我刚才添加的输出语句在构造函数中,但是,每次我点击sort按钮都会一遍又一遍地调用构造函数-这意味着在我加载页面后会一遍又一遍地创建一个具有默认值的新NavigationBean?显然,
@SessionScoped
是从
javax.enterprise.context
(CDI)导入的,而不是从
javax.faces.bean
(JSF)导入的。在构建视图期间再次调用它。会话范围确实也可以正常工作,尽管在同一会话中,当在多个浏览器窗口/选项卡中打开同一页面时,这只会导致不直观的行为和糟糕的用户体验。您更希望对此类属性使用请求或视图范围。另见男人…你很好…:)谢谢你的帮助-我仍在努力消化这一切。好的,我会检查你发布的所有内容,包括其他链接,看看我是否能让它发挥作用。
    <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>