我有一个
validation.xml
文件来检查表单的字段是否为空以及那种简单的验证。我还有一个 validate()
方法(从 ActionSupport
扩展)来检查更复杂的事情。但是,当我发送表单时,它会检查 XML 文件之前的方法,因此如果字段为空,则会出现 NullPointerException
。至少我认为正在发生这样的事情。
所以我的问题是,有没有办法改变验证的顺序,以便在方法之前检查 XML?
编辑:
我有想法在
String
方法中检查 null
是否不是 validate()
,这样我就可以避免这个问题,但我不认为这是最明智的做法。
拦截器会首先检查XML,但如果发现错误,IIRC 不会停止验证。我相信我有一个补丁,用一个标志控制。
我之前已经通过检查
validate
方法中的错误解决了这个问题,如果存在错误则不继续。
顺序始终相同,即硬编码顺序。
ValidationInterceptor
类(至少版本2.3.8)执行。
此拦截器通过标准验证框架运行操作,该框架反过来根据任何验证规则(在
等文件中找到)检查操作,并添加字段级和操作级错误消息(前提是操作实现ActionClass-validation.xml
)。该拦截器通常是堆栈中应用的最后一个(或倒数第二个)拦截器之一,因为它假设所有值都已在操作上设置。ValidationAware
如果在
参数中指定了正在调用的方法的名称,则该拦截器不会执行任何操作。excludeMethods
接受以逗号分隔的方法名称列表。例如,如果将excludeMethods
参数设置为foo!input.action
,则此拦截器将跳过对foo!back.action
和excludeMethods
的请求。"input, back"
操作请求的工作流程不会因该拦截器而改变。相反,此拦截器通常与
拦截器结合使用。workflow
注意:由于此方法扩展了
,因此它能够决定是否仅适用于操作类中的选择性方法。请参阅MethodFilterInterceptor
了解更多信息。MethodFilterInterceptor
首先,它检查是否启用了 声明式 验证并执行此操作,然后检查是否启用了 programmatic 验证并执行此操作。
您可以通过拦截器参数打开/关闭每种类型的验证。
拦截器参数:
- 默认为alwaysInvokeValidate
。如果true
true
方法将始终被调用,否则不会。validate()
- 默认为programmatic
。如果true
并且操作是true
,则调用Validateable
,以及以validate()
开头的任何方法。"validate"
- 默认为declarative
。基于 XML 或注释执行验证。true