在JSP中,有一个属性会话用于请求中的禁用自动生成会话.
<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
有没有办法在JSF2中做同样的事情?
谢谢
为什么?因为我们将公共注册表单页面作为应用程序中的默认页面.这是一个非常简单的表单,每次人(或机器人等)请求主页时都会创建会话.ManagedBean是RequestScope,但JSF在第一个navegation请求中创建一个会话.
只是不要使用视图/会话作用域bean(因此只使用请求或应用程序作用域bean)并通过在中设置以下上下文参数来设置状态保存client
而不是(默认).server
web.xml
javax.faces.STATE_SAVING_METHOD client
然后,JSF将不会创建会话,并且会javax.faces.ViewState
在必要时将视图状态存储在隐藏的输入字段中,并在表单中包含名称.
然而,创建和管理会话的成本几乎可以忽略不计.此外,在使用客户端视图状态保存时,您仍需要权衡(反)序列化视图状态和网络带宽的成本.
根据您的评论更新:
@BalusC是的,这可能是一个全球性的解决方案.但我只需要在这个公共页面中使用此方法.在其他页面我想要服务器端状态保存方法.
啊对.抱歉,我没有在JSF/Facelets中看到任何方法来禁用会话或更改基于每个请求的视图状态保存.我考虑使用纯HTML 而不是JSF
,让它提交到另一个JSF页面并使用@ManagedProperty
与JSF页面关联的bean.例如
同
@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); } // ... }