@ViewScoped JSF bean 被多次初始化
Posted
技术标签:
【中文标题】@ViewScoped JSF bean 被多次初始化【英文标题】:@ViewScoped JSF bean getting initialized multiple times 【发布时间】:2014-06-21 02:48:19 【问题描述】:我正在使用 primefaces 4.0 和 Mojarra 2.2.6
我正在从会话范围的 bean 打开一个对话框(模态) - 在对话中我初始化了一个 @ViewScoped
bean,它从会话映射等中检索少量名称(字符串)列表。
问题是每次我通过单击保存按钮提交时,都会创建新的viewScoped
bean,这显然不是我想要的行为。我看到许多其他关于同一主题的问题得到了解答,并且还尝试将 web.xml 设置为:
<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>
</context-param>
但它仍然不起作用。我还消除了几乎所有标签,除了输入字段和提交按钮,以消除任何可能导致它的特定标签处理程序,但似乎仍然无法确定它为什么不起作用。这是我的示例xhtml
页面和viewScope
bean 保存方法:
会话 bean 代码:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("NAMES", names);
Map<String, Object> map = new HashMap<String, Object>();
map.put("modal", true);
map.put("draggable", false);
map.put("resizable", false);
map.put("dynamic", true);
map.put("contentHeight", 500);
RequestContext.getCurrentInstance().openDialog("SaveNames.xhtml", map, null );
XHTML:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:o="http://omnifaces.org/ui"
xmlns:of="http://omnifaces.org/functions">
<h:form id="myform"
<p:inputText id="newFolderName" disabled="#not mybean.list" value="#mybean.newName" autocomplete="off"></p:inputText>
<p:commandButton id="saveNewNameButton" type="push" value="Save"
action="#mybean.saveNewName"
icon="ui-icon-disk" oncomplete="exit()" style="float: right">
</p:commandButton>
</h:form>
查看范围 bean:
public void saveNewName()
//saving logic goes here
【问题讨论】:
【参考方案1】:好的,经过一整天的故障排除后,我发现了这个非常愚蠢的原因。发布答案以防其他人最终遇到同样的问题。
我使用了错误的@ViewScoped
包注释。显然有两个注解,javax.faces.view.ViewScoped
和javax.bean.ViewScoped
-
正确使用的是javax.bean.ViewScoped
- 但是,如果您在 STS/eclipse 中没有注意它会在自动完成中建议包时,您最终可能会选择错误的包,这可能会导致此问题。
【讨论】:
javax.faces.view.ViewScoped
用于 CDI backing beans以上是关于@ViewScoped JSF bean 被多次初始化的主要内容,如果未能解决你的问题,请参考以下文章
在 JSF 中如何以及何时销毁 @ViewScoped bean?
JSF 2.x @ViewScoped 托管 bean 线程安全吗?
JSF ViewScoped bean 在所有 ajax 请求中的唯一 ID?
即使在刷新页面后,Firefox 也会在 JSF-Viewscoped-Managed-Bean 中保留数组的内容
无法将 JSF ViewScoped bean 作为 ManagedProperty 注入 Validator
JSF 2.2 内存消耗:为啥 Mojarra 将最后 25 个视图的 ViewScoped Beans 保留在内存中?