- Struts 2自定义验证
- 工作流程拦截器
- 可验证的界面
- 验证意识接口
- 自定义验证示例
我们可以通过在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类来定义验证逻辑和错误消息。
执行自定义验证的步骤
步骤如下:
- 创建表单以获取用户输入
- 通过扩展ActionSupport类并覆盖validate方法, 在操作类中定义验证逻辑
- 通过在struts.xml文件中输入的名称来定义错误消息的结果
执行自定义验证的示例
在此示例中, 我们将创建4个页面:
- index.jsp以供用户输入。
- RegisterAction.java, 用于定义验证逻辑。
- 用于定义结果和操作的struts.xml。
- 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中开发)
输出
定义操作级别错误消息
操作级别错误消息适用于整个表单。我们可以通过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>
输出
下载此示例(在不带jar的Eclipse ide中开发)
下载此示例(在Myeclipse ide中开发)
评论前必须登录!
注册