个性化阅读
专注于IT技术分析

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

  1. Struts 2自定义验证
  2. 工作流程拦截器
  3. 可验证的界面
  4. 验证意识接口
  5. 自定义验证示例

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

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

工作流程拦截器

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

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

它位于defaultStack中, 因此我们不需要显式定义它。

工作流拦截器的参数

仅为工作流程拦截器定义了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="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 setters

public 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="name"/><br/>
Password:<s:property value="password"/><br/>

下载此示例(在不带jar的Eclipse ide中开发)

下载此示例(在Myeclipse ide中开发)

输出

struts 2自定义验证示例输出1
struts 2定制验证示例输出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 setters

public 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="register"></s:submit>
</s:form>

输出

struts 2自定义验证示例输出1
struts 2定制验证示例输出4

下载此示例(在不带jar的Eclipse ide中开发)

下载此示例(在Myeclipse ide中开发)

赞(0)
未经允许不得转载:srcmini » Struts 2自定义验证-工作流拦截器示例图解

评论 抢沙发

评论前必须登录!