【问题标题】:Navigation on validation failure in Seam/JSFSeam/JSF 中验证失败的导航
【发布时间】:2010-09-16 03:47:06
【问题描述】:

我已经用Seam (2.0.2.SP1) 玩了几个星期了,我已经掌握了大部分基础知识,但是我还没有想出一个像样的解决方案。

假设我在/foo.xhtml 有一个表单,其中包含一个重写规则,这样/foo.seam?id=<fooId> 之类的URL 就被转换为/foo/<fooId>。表单上有一个commandButton,动作为#{fooHome.update}。我在/foo.page.xml 中还有一个导航规则,它在成功发布后重定向回一个漂亮的、书签友好的 GET:

<navigation from-action="#{fooHome.update}">
    <rule if-outcome="updated">
        <redirect view-id="/foo.xhtml">
            <param name="id" value="#{fooHome.instance.id}"/>
        </redirect>
    </rule>
</navigation>

问题是当验证错误发生时,导航规则被跳过,我在 POST 之后最终到达/foo

我的问题:有没有办法在验证错误时重定向,所以我最终得到了对 /foo/&lt;fooId&gt; 的 GET 请求,而不是对 /foo 的 POST?

我尝试在 fooHome 中滚动我自己的验证方法,返回“失败”结果,但我真的不希望无效数据通过验证阶段(从而进入当前对话)。

【问题讨论】:

    标签: java rest jsf seam


    【解决方案1】:

    您通常会在验证失败时重新显示相同的视图,而不是重定向。假设您将 UrlRewrite 用于重写规则,也许您可​​以使用 outbound-rule 以便在这种情况下仍显示 /foo/{fooId} URL。

    【讨论】:

    • 我确实在使用 UrlRewrite,但我似乎无法构建这样的出站规则。
      使用当前视图 (/foo) 作为操作,而不是重写的 URL (/foo/)。除非我遗漏了某些东西(完全有可能),否则我看不到将 纳入出站规则的方法。
    • 最后,正如您所建议的,我只是重新设计了我的表单,以保持对验证失败的相同看法。我仍然很好奇是否有办法做我最初希望的事情,但这暂时可行。
    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 2013-02-27
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多