Seam/JSF中的验证失败导航
问题描述:
我一直在玩Seam(2.0.2.SP1)几周,并且我掌握了大部分基础知识,但我还没有拿出一个体面的解决以下问题。Seam/JSF中的验证失败导航
假设我有一个表格/foo.xhtml
,其重写规则使得像/foo.seam?id=<fooId>
这样的URL转换为/foo/<fooId>
。表单上有commandButton
,其行动为#{fooHome.update}
。我也有/foo.page.xml
导航规则,一个成功的POST之后重定向到一个不错的,书签友好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/<fooId>
的GET请求,而不是POST到/foo
?
我试着在fooHome
中滚动我自己的验证方法,返回一个“失败”的结果,但我真的不希望无效数据越过验证阶段(从而进入当前对话)。
答
您通常会在验证失败时重新显示相同的视图,而不是重定向。假设您使用UrlRewrite作为重写规则,也许您可以使用出站规则,这样在这种情况下仍会显示/foo/{fooId} URL。
我的确在使用UrlRewrite,但似乎无法构建这样的出站规则。
使用当前视图(/ foo)作为操作,而不是重写的URL(/ foo/