【问题标题】:JSF errors and redirectJSF 错误和重定向
【发布时间】:2012-03-18 20:00:58
【问题描述】:

我有一个通过 id 显示项目的页面:item.xhtml?id=xxx

如果没有提供 id,则显示所有项目的列表。

在同一页面中,有一个用于更新项目字段的表单。 使用<f:viewParam> 和隐藏的输入,我可以在提交表单时再次显示item.xhtml?id=xxx。但是如果发生验证错误(我使用 Bean Validation),item.xhtml 会显示所有项目的列表和错误消息。有没有办法即使发生错误也能重定向?

PS: 为什么jsf会从url中去掉查询字符串?我的意思是,如果呈现的表单操作是/context/page.xhtml?query=string 而不仅仅是/context/page.xhtml,则不会存在此类问题。我哪里错了?

【问题讨论】:

标签: jsf-2


【解决方案1】:

通过@ViewScoped将托管bean放在视图范围内。如果您出于某种原因确实需要您的 bean 请求范围,那么您需要通过 <f:param> 传递参数。

<h:commandButton value="Submit" action="#{bean.submit}">
    <f:param name="paramName" value="#{param.paramName}" />
</h:commandButton>

对于表单操作 URL,这是设计使然。您可以通过提供自己的 ViewHandler 实现来覆盖它,其中相应地覆盖 getActionURL() 方法。

【讨论】:

  • @Alf:请更详细地描述“不起作用”。 JSF 1.x 不支持它,但 JSF 2.x 肯定支持它。
  • 它不起作用,因为如果发生验证错误,显示的页面是 item.xhtml 而不是 item.xhtml?id=xxx。我试过@ViewScoped。这可行,但我正在使用 CDI。
  • 该参数是作为 POST 请求而不是 GET 发送的。验证错误显然是因为您使用了错误的&lt;f:param&gt; 名称或值。至于保持 URL 相同,请使用自定义 ViewHandler,其中您相应地覆盖 getActionURL(),如前所述。
猜你喜欢
  • 2011-09-25
  • 2012-01-08
  • 2014-12-30
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 2013-11-11
相关资源
最近更新 更多