个性化阅读
专注于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自定义验证-工作流拦截器示例图解

评论 抢沙发

评论前必须登录!