Jsf PrimeFaces向导未重置
我们在Tomcat7上使用PrimeFaces 4.0+spring 4 我转到PrimeFaces show case,打开向导,键入名字和姓氏,然后点击next按钮。然后我从左面板中选择其他菜单(如Jsf PrimeFaces向导未重置,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我们在Tomcat7上使用PrimeFaces 4.0+spring 4 我转到PrimeFaces show case,打开向导,键入名字和姓氏,然后点击next按钮。然后我从左面板中选择其他菜单(如自动完成),我返回向导,名字和姓氏字段已清除。这正是我所期望的 我开发了一个与上面相同的向导,但每次我回到向导页面时,向导仍保留以前输入的值,并且不会重置 我的托管bean如下所示(我使用了文档中提到的ViewScopednoSessionScope): 编辑: 我发现问题在于JSF和Spring
自动完成
),我返回向导,名字和姓氏字段已清除。这正是我所期望的
我开发了一个与上面相同的向导,但每次我回到向导页面时,向导仍保留以前输入的值,并且不会重置
我的托管bean如下所示(我使用了文档中提到的ViewScoped
noSessionScope
):
编辑:
我发现问题在于JSF和Spring的集成。当我删除
@Named
并使用@ManagedBean
时,它工作正常。有什么评论吗 Spring没有对JSFViewScope
的内置支持,但您可以通过以下方式将此范围添加到JSF中:
public class ViewScope implements Scope {
public Object get(String name, ObjectFactory<?> objectFactory) {
Map<String, Object> viewMap = FacesContext.getCurrentInstance()
.getViewRoot().getViewMap();
if (viewMap.containsKey(name)) {
return viewMap.get(name);
} else {
Object object = objectFactory.getObject();
viewMap.put(name, object);
return object;
}
}
public Object remove(String name) {
return FacesContext.getCurrentInstance().getViewRoot().getViewMap()
.remove(name);
}
public String getConversationId() {
return null;
}
public void registerDestructionCallback(String name, Runnable callback) {
// Not supported
}
public Object resolveContextualObject(String key) {
return null;
}
}
最后:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@Named
@ViewScoped
@Scope("view")
public class AccountController {
@Valid
private Account account = new Account()
//Setters and getters
}
@ViewScoped
现在是虚拟的,不需要。
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="view">
<bean class="utils.ViewScope" />
</entry>
</map>
</property>
</bean>
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@Named
@ViewScoped
@Scope("view")
public class AccountController {
@Valid
private Account account = new Account()
//Setters and getters
}