Struts 2自定义验证-工作流拦截器示例图解

  1. Struts 2自定义验证
  2. 工作流程拦截器
  3. 可验证的界面
  4. 验证意识接口
  5. 自定义验证示例
我们可以通过在action类中实现Validateable接口在struts 2中定义自己的验证逻辑(自定义验证)。
工作流拦截器用于获取有关在操作类中定义的错误消息的信息。
工作流程拦截器
工作流拦截器检查是否存在任何验证错误。它不执行任何验证。
当操作类实现Validateable接口时, 将应用它。输入是此拦截器的默认参数, 它确定要为操作或字段错误调用的结果。
它位于defaultStack中, 因此我们不需要显式定义它。
工作流拦截器的参数 【Struts 2自定义验证-工作流拦截器示例图解】仅为工作流程拦截器定义了1个参数。
Parameter Description
inputResultName 指定在发现字段错误或操作错误时要返回的结果名称。默认设置为输入。
Validateabale界面
必须实现Validateable接口才能在操作类中执行验证逻辑。它仅包含一个方法validate(), 必须在操作类中将其重写以定义验证逻辑。 validate方法的签名为:
public void validate();

ValidationAware界面
ValidationAware接口可以接受字段级别或操作类级别的错误消息。字段级别的消息保留在Map中, 而Action类级别的消息保留在集合中。应该由操作类实现以添加任何错误消息。
ValidatationAware接口的方法
ValidationAware接口的方法如下:
Method Description
void addFieldError(String fieldName, String errorMessage) 为指定的字段添加错误消息。
void addActionError(String errorMessage) 为此操作添加一个操作级错误消息。
void addActionMessage(字符串消息) 为此操作添加一个操作级别的消息。
void setFieldErrors(Map < String, List < String > > 地图) 设置字段错误消息的集合。
void setActionErrors(Collection < String> errorMessages) 设置此操作的错误消息集合。
setActionMessages(Collection < String> 消息) 设置此操作的消息集合。
boolean hasErrors() 检查是否存在任何字段或操作错误。
boolean hasFieldErrors() 检查是否存在任何字段错误。
boolean hasActionErrors() 检查是否有任何操作级错误消息。
布尔hasActionMessages() 检查是否有任何操作级别的消息。
Map < String, List < String > > getFieldErrors() 返回所有字段级别的错误消息。
Collection< String> getActionErrors() 返回所有操作级别的错误消息。
Collection< String> getActionMessages() 返回所有操作级别的消息。
注意:ActionSupport类实现Validateable和ValidationAware接口, 因此我们可以继承ActionSupport类来定义验证逻辑和错误消息。 执行自定义验证的步骤
步骤如下:
  1. 创建表单以获取用户输入
  2. 通过扩展ActionSupport类并覆盖validate方法, 在操作类中定义验证逻辑
  3. 通过在struts.xml文件中输入的名称来定义错误消息的结果
执行自定义验证的示例
在此示例中, 我们将创建4个页面:
  1. index.jsp以供用户输入。
  2. RegisterAction.java, 用于定义验证逻辑。
  3. 用于定义结果和操作的struts.xml。
  4. view组件的welcome.jsp。
1)创建index.jsp作为输入
该jsp页面使用struts UI标记创建表单。它从用户那里接收名称, 密码和电子邮件ID。
index.jsp
< %@ taglib uri="/struts-tags" prefix="s" %> < s:form action="register"> < s:textfield name="name" label="Name"> < /s:textfield> < s:password name="password" label="Password"> < /s:password> < s:submit value="http://www.srcmini.com/register"> < /s:submit> < /s:form>

2)创建动作类
该操作类继承了ActionSupport类, 并且重写了validate方法以定义验证逻辑。
RegisterAction.java
package com.srcmini; import com.opensymphony.xwork2.ActionSupport; public class RegisterAction extends ActionSupport{ private String name, password; public void validate() { if(name.length()< 1) addFieldError("name", "Name can't be blank"); if(password.length()< 6) addFieldError("password", "Password must be greater than 5"); }//getters and setterspublic String execute(){ //perform business logic here return "success"; } }

3)在struts.xml中定义输入结果
该xml文件通过名称输入定义了一个额外的结果, 如果在操作类中发现任何错误消息, 则将调用该结果。
struts.xml
< ?xml version="1.0" encoding="UTF-8" ?> < !DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> < struts> < package name="default" extends="struts-default"> < action name="register" class="com.srcmini.RegisterAction"> < result> welcome.jsp< /result> < result name="input"> index.jsp< /result> < /action> < /package> < /struts>

4)创建视图组件
它是显示用户信息的简单jsp文件。
welcome.jsp
< %@ taglib uri="/struts-tags" prefix="s" %> Name:< s:property value="http://www.srcmini.com/name"/> < br/> Password:< s:property value="http://www.srcmini.com/password"/> < br/>

下载此示例(在不带jar的Eclipse ide中开发)
下载此示例(在Myeclipse ide中开发)
输出
Struts 2自定义验证-工作流拦截器示例图解

文章图片
Struts 2自定义验证-工作流拦截器示例图解

文章图片
定义操作级别错误消息
操作级别错误消息适用于整个表单。我们可以通过validate()方法中ValidationAware接口的addActionError()方法定义操作级别错误消息。例如:
package com.srcmini; import com.opensymphony.xwork2.ActionSupport; public class RegisterAction extends ActionSupport{ private String name, password, email; public void validate() { if(name.trim().length()< 1 || password.trim().length()< 1){ addActionError("Fields can't be blank"); } }//getters and setterspublic String execute(){ return "success"; } }

现在, 你需要在index.jsp文件中使用actionerror标记来显示操作级别错误消息。
index.jsp
< %@ taglib uri="/struts-tags" prefix="s" %> < s:actionerror/> < s:form action="register"> < s:textfield name="name" label="Name"> < /s:textfield> < s:password name="password" label="Password"> < /s:password> < s:textfield name="email" label="Email Id"> < /s:textfield> < s:submit value="http://www.srcmini.com/register"> < /s:submit> < /s:form>

输出
Struts 2自定义验证-工作流拦截器示例图解

文章图片
Struts 2自定义验证-工作流拦截器示例图解

文章图片
下载此示例(在不带jar的Eclipse ide中开发)
下载此示例(在Myeclipse ide中开发)

    推荐阅读