JSF View Scope浏览器后退按钮问题

时间:2014-02-05 19:47:34

标签: jsf-2

我有一个包含一个字段的简单页面,在成功提交后,它会被重定向到第二页,如果提交用户不成功则保持不变。我正在使用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.

    }

0 个答案:

没有答案