在JSP中,有一个属性session用于禁用请求中的自动生成会话。
<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
有没有办法在 JSF2 中做同样的事情?
Thanks
为什么?因为我们有一个公共注册表单页面作为应用程序中的默认页面。这是一个非常简单的表单,每次人们(或机器人等)请求主页时都会创建会话。
ManagedBean 是 RequestScope,但 JSF 在第一个导航请求中创建一个会话。
只是不要使用视图/会话范围的bean(因此仅使用请求或应用程序范围的bean)并将状态保存设置为client
而不是(默认)server
通过设置以下上下文参数web.xml
.
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
然后 JSF 将不会创建会话,并将视图状态存储在一个名为 的隐藏输入字段中javax.faces.ViewState
如有需要,请以表格形式提供。
然而,创建和管理会话的成本几乎可以忽略不计。此外,在使用客户端视图状态保存时,您仍然必须权衡视图状态序列化(反)序列化和网络带宽的成本。
Update根据你的评论:
@BalusC 是的,这可能是一个全球解决方案。但我只在这个公共页面中需要这个方法。在其他页面中,我想要服务器端状态保存方法。
啊,对了。抱歉,我在 JSF/Facelets 中没有看到任何好的方法来禁用会话或更改基于每个请求的视图状态保存。我会考虑使用纯 HTML<form>
而不是 JSF<h:form>
,让它提交到另一个 JSF 页面并利用@ManagedProperty
在与 JSF 页面关联的 bean 中。例如。
<form action="register.jsf" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" />
</form>
with
@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);
}
// ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)