我正在使用 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
}
答案 0 :(得分:1)
好的,经过一整天的故障排除后发现真的很傻了。如果其他人可能最终遇到同样的问题,则发布回答。
我使用了错误的@ViewScoped
包注释。显然有两个注释javax.faces.view.ViewScoped
和javax.bean.ViewScoped
-
正确使用的是javax.bean.ViewScoped
- 但是如果您在STS / eclipse中没有注意到它在自动完成时建议包,那么您可能会找到可能导致此问题的错误包。