@ViewScoped JSF bean多次初始化

时间:2014-05-04 21:16:49

标签: jsf view primefaces javabeans instantiation

我正在使用 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 个答案:

答案 0 :(得分:1)

好的,经过一整天的故障排除后发现真的很傻了。如果其他人可能最终遇到同样的问题,则发布回答。

我使用了错误的@ViewScoped包注释。显然有两个注释javax.faces.view.ViewScopedjavax.bean.ViewScoped -

正确使用的是javax.bean.ViewScoped - 但是如果您在STS / eclipse中没有注意到它在自动完成时建议包,那么您可能会找到可能导致此问题的错误包。