Jsf @无原因调用后构造方法
对于一个项目,我正在更新一个Java web应用程序,该应用程序有一些未解决的问题。我对bean的init方法有问题,该方法在不应该调用时被调用 导致问题的页面有三个按钮可返回到您先前访问过的三个不同页面。其中两个按钮导致调用您当前所在页面bean的init方法。您必须再次按下按钮才能执行操作(=返回到另一页)。 奇怪的是:你可以通过两个菜单选项进入问题页面。一种是问题的原因,另一种不是。您可以毫无问题地返回到另一页 问题页面的xhtml片段:Jsf @无原因调用后构造方法,jsf,jstl,commandbutton,postconstruct,Jsf,Jstl,Commandbutton,Postconstruct,对于一个项目,我正在更新一个Java web应用程序,该应用程序有一些未解决的问题。我对bean的init方法有问题,该方法在不应该调用时被调用 导致问题的页面有三个按钮可返回到您先前访问过的三个不同页面。其中两个按钮导致调用您当前所在页面bean的init方法。您必须再次按下按钮才能执行操作(=返回到另一页)。 奇怪的是:你可以通过两个菜单选项进入问题页面。一种是问题的原因,另一种不是。您可以毫无问题地返回到另一页 问题页面的xhtml片段: <h:commandButton value
<h:commandButton value="Show batch" action="/BatchDetail.xhtml" />
<h:commandButton value="Show messages" action="/BatchMessage.xhtml" />
<c:if test="#{batchMessageDetailBean.batch.part}">
<h:commandButton value="Show both" action="/BatchAndBatchMessage.xhtml" />
</c:if>
“显示批处理”和“显示消息”导致问题。第三个按钮仅通过导致前两个按钮出现问题的菜单选项出现。奇怪的是,这个按钮没有再次调用init方法
我读过关于“c:if”会引起问题的文章,但当我完全删除它时,一切都没有改变。
bean是@viewscope的。
我没有用弹簧。如果你需要更多的细节,尽管问
有什么想法吗?组件通过POST请求提交父表单。整个页面中引用的任何请求范围的备份bean都将在还原视图阶段重新初始化。并且,当使用2.1.18之前的Mojarra版本时,也将在恢复视图阶段重新初始化
因此,这是完全可以预期的行为
这里的具体问题是,这些按钮基本上被滥用,用于简单的页到页导航。您根本不想执行回发。您只想导航到另一个页面。为此,您应该使用
。这基本上就像一个GET链接。另外,浏览器地址栏中的URL将反映到正确的URL
<h:button value="Show batch" outcome="/BatchDetail.xhtml" />
<h:button value="Show messages" outcome="/BatchMessage.xhtml" />
<h:button value="Show both" outcome="/BatchAndBatchMessage.xhtml" rendered="#{batchMessageDetailBean.batch.part}" />
请注意,我利用这个机会改进了条件渲染,只使用了rendered
属性,而不是视图构建时间标记,这不仅解决了使用2.1.18之前的Mojarra版本时的问题,而且对“使用正确的工具进行作业”也起到了积极的作用
另见: