JSF 2.0:为什么我的ViewScope Bean重新创建,即使仍然在同一个视图
在我的.xhtml页面中,我有以下表格:
... ...
CustomerTemplate.xhtml是:
... // import css, js files ... // Other things on the page ...
这是我的ManagedBean:
@ManagedBean @ViewScoped public class MrBean { ... private List items; ... @PostConstruct public void prepareItemList() { ... Map params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); partnerID = Long.parseLong(params.get("partnerID")); ... } }
如您所见,我的MrBean是一个ViewScoped ManagedBean。 我预计@PostContruct函数只会在第一次呈现页面时调用一次。 但是,当我单击Add To Cart
按钮时,我在Long.parseLong(params.get("partnerID"))
行遇到了nullexception,即使我仍然在同一个View上。
如果有人能就如何解决这个问题给我一个建议,我将非常感激。
更新:我设法通过将commandButton
包装在ajax
标记内来使函数正常工作,如下所示:
... ....
这有很多可能的原因,最终归结为JSF问题1492中描述的鸡蛋问题。 您正在使用
将UI组件绑定到视图范围的托管bean属性,或者绑定标记处理程序的属性,如
,
等等到视图范围的托管bean属性。
这计划在JSF 2.2中修复。 在此之前,最好的办法是寻找替代方法或将上下文参数javax.faces.PARTIAL_STATE_SAVING
设置为false
。
也可以看看:
- JSF 2.0中的通信 – @ViewScoped在标记处理程序中失败
- 为什么不捕获Exception catch RuntimeException?
- 论断言和例外; Java的
- 自动exception处理
- ClassNotFoundException与NoClassDefFoundError
- 自动assembly:预计至少有一个bean可以作为此依赖关系的autowire候选者
- 在Java中,如何使用JUnitvalidation抛出的exception?
- Android developpement,Gottox socket.io-java-client:file not fount Exception /socket.io/1/
- 在Java中,是使用throws Exception而不是抛出多个特定exception的好习惯?
- 为什么hibernate将HibernateException更改为(未选中)RuntimeException