只要不使用視圖/會話範圍豆(所以使用唯一的請求或應用程序作用域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