如果我理解,Struts2拦截器堆栈正确,工作流拦截器会查看验证拦截器是否报告了任何验证失败。如果发现已经验证失败,则返回(默认情况下)Action.INPUT
如果是这种情况,如果正在执行的Action没有在INPUT
配置中定义struts.xml
结果,会发生什么?
答案 0 :(得分:0)
如果它返回INPUT,并且没有为此定义结果(并且没有一般结果),您将得到一个类似
的错误页面 No result defined for type INPUT and action <action name>.
您可以定义一个始终显示为“INPUT”的常规页面,但更好的解决方案是,如果您有一个validate()方法,通常最好定义一个INPUT结果返回。即使您没有明确地进行任何验证,诸如传递给整数字段的非整数值之类的东西也会导致该结果,因此定义它是个好主意。
答案 1 :(得分:0)
INPUT
结果,您可以通过将参数设置为拦截器inputResultName
来覆盖它。
<interceptor-ref name="workflow">
<param name="inputResultName">error</param>
</interceptor-ref>
进一步澄清和提及workflow interceptor。
在上面的示例中,操作没有INPUT
结果,如果发现操作错误或字段错误,则返回结果ERROR
。
答案 2 :(得分:0)
您可以使用ValidationWorkflowAware
界面定义每个操作的结果名称
或
您可以使用InputConfig
注释以编程方式更改每个操作的结果名称
或
随着即将推出的Struts版本2.3.15的新版本,也可以使用ValidationErrorAware
接口,可以通知操作有关错误的信息,并且可以更改返回的结果名称:https://issues.apache.org/jira/browse/WW-4071