在JSP中,有一个属性会话用于请求中的禁用自动生成会话.
<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
Run Code Online (Sandbox Code Playgroud)
有没有办法在JSF2中做同样的事情?
谢谢
为什么?因为我们将公共注册表单页面作为应用程序中的默认页面.这是一个非常简单的表单,每次人(或机器人等)请求主页时都会创建会话.ManagedBean是RequestScope,但JSF在第一个navegation请求中创建一个会话.
只是不要使用视图/会话作用域bean(因此只使用请求或应用程序作用域bean)并通过在中设置以下上下文参数来设置状态保存client而不是(默认).serverweb.xml
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
然后,JSF将不会创建会话,并且会javax.faces.ViewState在必要时将视图状态存储在隐藏的输入字段中,并在表单中包含名称.
然而,创建和管理会话的成本几乎可以忽略不计.此外,在使用客户端视图状态保存时,您仍需要权衡(反)序列化视图状态和网络带宽的成本.
根据您的评论更新:
@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>
Run Code Online (Sandbox Code Playgroud)
同
@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);
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4114 次 |
| 最近记录: |