我需要帮助。我是 JSF 的新手,我在我的项目中使用JSF2和 Richfaces。
我想清除我<f:ajax render="@form"/>
在刷新按钮中使用的表单。我在那个屏幕上有一个添加按钮,它添加了一条记录,然后我点击刷新,然后它会转到默认页面。但是当我再次输入记录时,我之前输入的那些值仍保留在表单字段中。
谁能帮我解决这个问题?
假设您说“我点击刷新”时指的是浏览器的刷新按钮,那么如果您错误地将持有视图范围数据的 bean 放置在会话范围中,就会发生这种情况。然后,您基本上重用了与表单之前提交的完全相同的 bean。将 bean 放在视图范围而不是会话范围中应该可以解决这个问题。当您导航到不同的页面或触发新请求(如通过点击浏览器的刷新按钮)时,视图范围结束。
如果您因为糟糕的设计限制使用会话范围而更新,那么您可能想通过一个
<f:event type="preRenderView" listener="#{sessionScopedBeanWhichShouldActuallyBeViewScoped.resetModel}" />
和
public void resetModel() {
if (!FacesContext.getCurrentInstance().isPostback()) {
model = null;
}
}
这将在每个 GET 请求上清除模型。然而,不管这个 hack,当最终用户在同一个会话中的不同浏览器选项卡/窗口中打开同一个视图时,你仍然会遇到严重的问题。
正确的解决方案是将 bean 放在视图范围而不是会话范围中,如前所述。