只要不使用视图/会话范围豆(所以使用唯一的请求或应用程序作用域bean),并在web.xml
设置以下环境参数保存到client
的(默认值),而不是server
设置状态。
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
那么JSF不会创建会话,并且将视图状态在隐藏的输入字段的名称javax.faces.ViewState
形式存放在有需要时。
创建和管理会话的成本是相当可以忽略的。此外,在使用客户端视图状态保存时,您仍然必须权衡(de)序列化视图状态和网络带宽的成本。
更新按您的评论:
@BalusC是的,这可能是一个全球性的解决方案。但我只需要在这个公共页面中使用这种方法。在其他页面我想要服务器端的状态保存方法。
啊对了。对不起,我没有在JSF/Facelets中看到任何好的方法来禁用会话,或者在每个请求的基础上更改视图状态保存。我会考虑使用普通的HTML <form>
而不是JSF <h:form>
,让它提交到另一个JSF页面并在与JSF页面关联的bean中使用@ManagedProperty
。例如。
<form action="register.jsf" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" />
</form>
与
@ManagedBean
@RequestScoped
public class Register {
@ManagedProperty(value="#{param.username}")
private String username;
@ManagedProperty(value="#{param.password}")
private String password;
@PostConstruct
public void init() {
// Do your thing here.
System.out.println("Submitted username/password: " + username + "/" + password);
}
// ...
}
@BalusC增加了为什么有问题。 – angelcervera 2010-11-04 13:02:56