0

我需要帮助。我是 JSF 的新手,我在我的项目中使用JSF2和 Richfaces。

我想清除我<f:ajax render="@form"/>在刷新按钮中使用的表单。我在那个屏幕上有一个添加按钮,它添加了一条记录,然后我点击刷新,然后它会转到默认页面。但是当我再次输入记录时,我之前输入的那些值仍保留在表单字段中。

谁能帮我解决这个问题?

4

1 回答 1

2

假设您说“我点击刷新”时指的是浏览器的刷新按钮,那么如果您错误地将持有视图范围数据的 bean 放置在会话范围中,就会发生这种情况。然后,您基本上重用了与表单之前提交的完全相同的 bean。将 bean 放在视图范围而不是会话范围中应该可以解决这个问题。当您导航到不同的页面或触发新请求(如通过点击浏览器的刷新按钮)时,视图范围结束。

也可以看看:


如果您因为糟糕的设计限制使用会话范围而更新,那么您可能想通过一个

<f:event type="preRenderView" listener="#{sessionScopedBeanWhichShouldActuallyBeViewScoped.resetModel}" />

public void resetModel() { 
    if (!FacesContext.getCurrentInstance().isPostback()) {
        model = null;
    }
}

这将在每个 GET 请求上清除模型。然而,不管这个 hack,当最终用户在同一个会话中的不同浏览器选项卡/窗口中打开同一个视图时,你仍然会遇到严重的问题。

正确的解决方案是将 bean 放在视图范围而不是会话范围中,如前所述。

于 2012-10-24T15:01:15.910 回答