我有一个包含一个字段的简单页面,在成功提交后,它会被重定向到第二页,如果提交用户不成功则保持不变。我正在使用ViewScoped
bean,以便在成功提交后销毁bean。
这是问题,在提交失败后,用户停留在同一视图上,因此没有清除任何内容。现在,如果用户点击Home
按钮,他将被重定向到主页,如果我点击浏览器后退按钮,我的浏览器会发出有关重新提交的警告消息。如果我单击浏览器ReSend
弹出按钮,则会重新提交视图中的所有先前值。根据View范围,它应该已被清除。我错过了什么?
index.xhtml
<h:form>
<h:commandButton type="submit" value="Home" action="#{app.toHome()}" />
<br/>
First Name: <h:inputText value="#{app.firstName}" autocomplete="off"/>
<br/>
<h:commandButton type="submit" value="Submit" action="#{app.doSubmit()}" />
<br/>
<h:messages globalOnly="true" layout="table" />
App.java
@ManagedBean
@ViewScoped
public class App implements Serializable {
private static final long serialVersionUID = -5027458534459958194L;
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String doSubmit() {
Random r = new Random();
if (r.nextInt() % 2 == 0) {
return "/second.xhtml?faces-redirect=true";
} else {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Failed for some reason", "Failed for some reason"));
return null;
}
}
public String toHome() {
return "/home.xhtml?faces-redirect=true";
}
}
MyFilter.java
if (!req.getRequestURI().startsWith(req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
res.setHeader("Pragma", "no-cache"); // HTTP 1.0.
res.setDateHeader("Expires", 0); // Proxies.
}