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