【问题标题】:jsf clearing the formjsf清除表格
【发布时间】:2012-10-24 14:56:52
【问题描述】:

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

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

谁能帮我解决这个问题?

【问题讨论】:

  • 欢迎来到 SO。您可以编辑您的问题,而不是在 cmets 中添加额外信息。

标签: jsf-2 richfaces


【解决方案1】:

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

另见:


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

来解决这个问题
<f:event type="preRenderView" listener="#{sessionScopedBeanWhichShouldActuallyBeViewScoped.resetModel}" />

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

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

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

【讨论】:

  • 我将 sessionscope 用于其他目的,如果我使用视图范围,它将破坏所有其他代码
  • 那么你的设计问题就更大了。对不起,这不能用一个答案来解决。在新问题中分解新问题。无论如何,您现在应该了解当前问题的原因:您使用了错误的数据范围。
  • 它与@viewscope 一起解决该问题,但是当我使用它时,我可以在添加某些内容时从一个选项卡切换到任何其他选项卡,并且如果我切换到其他选项卡,它会挂起而无需点击刷新操作。我无法执行任何后续操作。你能帮我解决这个问题吗?
  • 此问题与当前问题/问题无关。按带有问题详细描述的 按钮以及 SSCCE。
  • 因为它的行为是这样的,那么它怎么可能与这个问题无关。
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2011-08-27
  • 2016-03-30
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多