我有一个在页面上执行一些 ajax 更新并使用 @ViewScoped ManagedBean 的应用程序。当用户提交表单时,我的操作方法重定向到 Jsp 以使用 Cewolf 库显示图表。它工作正常,但似乎 bean 在这个重定向中幸存下来。如果用户单击 Jsp 上的后退按钮,则所有“rendered ajax”字段都是空白的,但“execute ajax”字段显示之前的值。然后,如果我进行 ajax 更新,则“空白”字段将使用以前的值呈现...
重定向代码:
//save
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
Map<String, Object> sessionMap = externalContext.getSessionMap();
sessionMap.put("integrator", dataSource);
try
{
FacesContext.getCurrentInstance().getExternalContext().redirect("graph.jsp");
} catch (IOException ex)
{
Logger.getLogger(EquationsBean.class.getName()).log(Level.SEVERE, null, ex);
}
还有一些我的 index.xhtml:
<h:selectOneMenu value="#{equationsBean.equationsToSolve}" id="neqs">
<f:selectItems value = "#{equationsBean.eqsChoose}" />
<f:ajax render="equationForm" execute ="neqs" listener="# {equationsBean.equationsSelected}"/>
</h:selectOneMenu>
我期望的是,当我重定向到 Jsp 时,如果用户点击后退按钮,我的 bean 就会死掉并且表单是新鲜的。我已经尝试了一个过滤器来禁用缓存,但它的行为非常奇怪。此外,我没有使用 Jsp 标记,仅使用 facelets,并且某些组件具有“rendered”属性,具体取决于我的 bean 状态。我应该发布整个.xhtml,但它有点大......
感谢有人可以帮助我理解这种行为!