- Struts 2自定义验证
- 工作流程拦截器
- 可验证的界面
- 验证意识接口
- 自定义验证示例
工作流拦截器用于获取有关在操作类中定义的错误消息的信息。
工作流程拦截器
工作流拦截器检查是否存在任何验证错误。它不执行任何验证。
当操作类实现Validateable接口时, 将应用它。输入是此拦截器的默认参数, 它确定要为操作或字段错误调用的结果。
它位于defaultStack中, 因此我们不需要显式定义它。
工作流拦截器的参数 【Struts 2自定义验证-工作流拦截器示例图解】仅为工作流程拦截器定义了1个参数。
Parameter | Description |
---|---|
inputResultName | 指定在发现字段错误或操作错误时要返回的结果名称。默认设置为输入。 |
必须实现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类并覆盖validate方法, 在操作类中定义验证逻辑
- 通过在struts.xml文件中输入的名称来定义错误消息的结果
在此示例中, 我们将创建4个页面:
- index.jsp以供用户输入。
- RegisterAction.java, 用于定义验证逻辑。
- 用于定义结果和操作的struts.xml。
- view组件的welcome.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中开发)
输出
文章图片
文章图片
定义操作级别错误消息
操作级别错误消息适用于整个表单。我们可以通过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>
输出
文章图片
文章图片
下载此示例(在不带jar的Eclipse ide中开发)
下载此示例(在Myeclipse ide中开发)
推荐阅读
- Struts 2字符串长度验证示例
- Struts 2实现文件上传示例图解
- Struts 2验证教程介绍
- vue 移动端禁用安卓手机返回键
- spring boot项目application.properties多环境配置文件jar包外部配置文件
- Android app 性能优化的思考--性能卡顿不好的原因在哪()
- android studio InnerClass annotations are missing corresponding EnclosingMember annotations. Such In
- 解压Assets.car获取App中的图片资源
- 如何在VMware里安装android-x86