将@ViewScoped与主模板一起使用不会重置输入

时间:2014-01-22 01:20:52

标签: jsf

我正在使用主模板(即<ui:composition template> / <ui:define>),其中左侧是导航面板,中间是内容面板。当我转到@ViewScoped的某个页面时,我会编辑一些字段,转到另一个重新加载内容区域的页面,然后返回到原始页面,并且所有字段都仍然填充了数据。这意味着视图永远不会结束。我尝试@RequestScoped产生了我想要的结果,但打破了与该bean相关的页面中的所有ajax。

  1. 将网页重置为原始状态的最佳方法是什么?
  2. 任何人都可以看到正在发生的事情,关于我的布局和内容区域(由ui:include组成)正在更新,这会导致这不会被视为对View的更改吗?

1 个答案:

答案 0 :(得分:0)

通过使用支持bean导航页面内容,ui:include由ajax更新,所有在同一页面中,JSF的当前视图永远不会超出范围,这就是为什么后台ViewScoped bean在导航后永远不会重置的原因

一个可能的解决方法是重新设计页面以使用传统导航。换句话说,假设你有几个p:menuitems。不是将actionListener分配给设置内容页面的某个支持bean函数(后面是包含ui:include的面板的更新),而是将每个menuitem的“action”设置为每个菜单项对应的页面。这会导致在单击菜单项时加载页面。

这产生了一个要求,即我必须稍微重新组织我的模板,以便我的网站的每个页面都嵌入其中。整个页面重新加载时会有一点点闪烁,但bean会相应地重置。