Struts 2 自定义验证 - Workflow 拦截器

17 Mar 2025 | 4 分钟阅读

我们可以通过在操作类中实现 Validateable 接口来在 struts 2 中定义我们自己的验证逻辑(自定义验证)。

工作流拦截器用于获取有关操作类中定义的错误消息的信息。

工作流拦截器

工作流拦截器检查是否存在任何验证错误。它不执行任何验证。

当操作类实现 Validateable 接口时应用。input 是此拦截器的默认参数,用于确定要为操作或字段错误调用的结果。

它在 defaultStack 中找到,因此我们不需要显式定义它。

工作流拦截器的参数

工作流拦截器仅定义了 1 个参数。

参数描述
inputResultName指定在找到字段错误或操作错误时要返回的结果名称。它默认设置为 input

Validateabale 接口

必须实现 Validateable 接口才能在操作类中执行验证逻辑。它只包含一个必须在操作类中重写的 validate() 方法来定义验证逻辑。validate 方法的签名是


ValidationAware 接口

ValidationAware 接口可以接受 字段级别操作类级别 的错误消息。字段级别的消息保存在 Map 中,操作类级别的消息保存在集合中。操作类应实现它以添加任何错误消息。

ValidatationAware 接口的方法

ValidationAware 接口的方法如下

方法描述
void addFieldError(String fieldName,String errorMessage)为指定的字段添加错误消息。
void addActionError(String errorMessage)为此操作添加操作级别的错误消息。
void addActionMessage(String message)为此操作添加操作级别的消息。
void setFieldErrors(Map<String,List<String>> map)设置字段的错误消息集合。
void setActionErrors(Collection<String> errorMessages)设置此操作的错误消息集合。
void setActionMessages(Collection<String> messages)设置此操作的消息集合。
boolean hasErrors()检查是否存在任何字段或操作错误。
boolean hasFieldErrors()检查是否存在任何字段错误。
boolean hasActionErrors()检查是否存在任何操作级别的错误消息。
boolean hasActionMessages()检查是否存在任何操作级别的消息。
Map<String,List<String>> getFieldErrors()返回所有字段级别的错误消息。
Collection<String> getActionErrors()返回所有操作级别的错误消息。
Collection<String> getActionMessages()返回所有操作级别的消息。

注意:ActionSupport 类实现了 Validateable 和 ValidationAware 接口,因此我们可以继承 ActionSupport 类来定义验证逻辑和错误消息。


执行自定义验证的步骤

步骤如下

  1. 创建表单以从用户获取输入
  2. 通过扩展 ActionSupport 类并重写 validate 方法,在操作类中定义验证逻辑
  3. 通过在 struts.xml 文件中以名称 input 定义错误消息的结果

执行自定义验证的示例

在此示例中,我们正在创建 4 个页面

  1. index.jsp 用于从用户输入。
  2. RegisterAction.java 用于定义验证逻辑。
  3. struts.xml用于定义结果和操作。
  4. welcome.jsp 用于视图组件。

1) 创建 index.jsp 用于输入

此 jsp 页面使用 struts UI 标签创建一个表单。它接收用户的姓名、密码和电子邮件 ID。

index.jsp

2) 创建 action 类

此操作类继承了 ActionSupport 类并重写了 validate 方法以定义验证逻辑。

RegisterAction.java

3) 在 struts.xml 中定义一个 input 结果

此 xml 文件定义了一个名为 input 的额外结果,如果操作类中找到任何错误消息,将调用该结果。

struts.xml

4) 创建视图组件

这是一个简单的 jsp 文件,显示用户的信息。

welcome.jsp

输出

struts 2 custom validation example output 1 struts 2 custom validation example output 2

定义操作级别错误消息

操作级别错误消息适用于整个表单。我们可以通过在 validate() 方法中使用 ValidationAware 接口的 addActionError() 方法来定义操作级别错误消息。例如

现在您需要在 index.jsp 文件中使用 actionerror 标签来显示操作级别的错误消息。

index.jsp

输出

struts 2 custom validation example output 1 struts 2 custom validation example output 4