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