◆使用客户端校验
校验规则文件的根元素是<validators…/>,<validators…/>元素可包含多个<filed…/>或<validator…/>元素,他们都用于配置校验规则,区别是:<filed-validator…/>是字段校验器的配置风格,而<validator…/>是非字段校验器的配置风格。
Struts2中每个Action中都有一个校验文件,文件名遵守如下规则:
<Action名字>-validation.xml,并且该文件必须放在与Action同一个目录下
Struts2使用客户端校验只需改变两个地方:
●将输入页面的表单元素改为使用Struts2标签来生成表单
●为该<s:form …/>元素增加validate=”true”属性
一个注册界面的实现:
图1 工程结构
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>请输入你的注册信息</title>
</head>
<body>
<h1>请输入你的注册信息</h1>
<s:form action="registerAction" method="post" validate="true">
<s:textfield label="用户名" name="name" size="20"/>
<s:password label="密码" name="pass" size="20"/>
<s:textfield label="年龄" name="age" size="20"/>
<s:textfield label="生日" name="birth" size="20"/>
<s:submit value="确认"/>
<!-- jsp代码 -->
<!-- 用户名:<input type="text" name="name"><br>
密 码:<input type="password" name="pass"><br>
年 龄:<input type="text" name="age"><br>
生 日:<input type="text" name="birth"><p>
<input type="submit" value="注册"> -->
</s:form>
</body>
</html>
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>register</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"/>
</struts>
RegisterAction.java
package com.sff.project;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class RegisterAction extends ActionSupport {
private String name;
private String pass;
private int age;
private Date birth;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the pass
*/
public String getPass() {
return pass;
}
/**
* @param pass the pass to set
*/
public void setPass(String pass) {
this.pass = pass;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
/**
* @return the birth
*/
public Date getBirth() {
return birth;
}
/**
* @param birth the birth to set
*/
public void setBirth(Date birth) {
this.birth = birth;
}
public String execute(){
return SUCCESS;
}
}
RegisterAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>*必须输入名字</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>用户名只能是字母和数字,且长度必须在4到25之间</message>
</field-validator>
</field>
<field name="pass">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>*必须输入密码</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{2,25})]]></param>
<message>密码只能是字母和数字,且长度必须在4到25之间</message>
</field-validator>
</field>
<!-- 指定age的范围 -->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>年纪必须在1到150之间</message>
</field-validator>
</field>
<!-- 指定birth的范围 -->
<field name="birth">
<field-validator type="date">
<param name="min">1900-01-01</param>
<param name="max">2050-01-01</param>
<message>年纪必须在${min}到$(max)之间</message>
</field-validator>
</field>
</validators>
运行结果:
图2 运行结果
注意检查浏览器的地址栏,该页面停留在原来的页面上并未提交到对应的Action中,这就表明上面的数据校验过程是客户端完成的。
◆ 非字段校验器配置风格
注意格式问题:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- 非字段校验器风格 -->
<!-- 配置制定必填字符串的校验器 -->
<validator type="requiredstring">
<!-- 使用校验器校验name属性 -->
<param name="fieldName">name</param>
<param name="trim">true</param>
<!-- 指定校验失败后输出name.required对应的国际化信息 -->
<message>${getText("name.requried")}</message>
</validator>
<!-- 配置指定正则表达式的校验器 -->
<validator type="regex">
<param name="fieldName">name</param>
<param name="trim">true</param>
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>${getText("name.regex")}</message>
</validator>
<validator type="requiredstring">
<param name="fieldName">pass</param>
<param name="trim">true</param>
<message>${getText("pass.required")}</message>
</validator>
<validator type="regex">
<param name="fieldName">pass</param>
<param name="trim">true</param>
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>${getText("pass.regex})"}</message>
</validator>
<validator type="int">
<param name="fieldName">age</param>
<param name="min">1</param>
<param name="max">150</param>
<message>${getText("age.range")}</message>
</validator>
<validator type="date">
<param name="fieldName">birth</param>
<param name="min">1900-1-1</param>
<param name="max">2050-12-31</param>
<message>${getText("birth.range")}</message>
</validator>
</validators>
◆ 短路校验器
采用短路校验器只需要在<validator…/>或<field-validator…/>中增加short-circuit=“true”即可。
分享到:
相关推荐
Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义一系列的验证规则来检查用户的输入。这些规则可以是简单的数据类型检查,如非空、长度限制,也可以是复杂的业务逻辑校验。校验过程通常分为...
输入校验的流程在Struts2中是结构化的,涉及多个步骤: 1. **类型转换**:首先,Struts2框架使用类型转换器将HTTP请求中的字符串参数转换为相应的Java类型,如Integer、Date等,并将这些值设置为Action类的属性。 ...
本文将深入探讨Struts2中的输入校验机制,以及如何对指定方法进行输入校验。 在Struts2中,输入校验通常分为两种方式:客户端校验和服务器端校验。客户端校验主要通过JavaScript在用户端进行,可以提供即时反馈,但...
在Struts2中,表单验证是非常重要的一个环节,它确保了用户输入的数据符合预设的规则,从而保证了应用程序的数据质量和安全性。本示例主要讲解的是使用XML文件进行表单验证的方法。 首先,让我们理解表单验证的基本...
在Struts2中,输入校验是确保数据安全、准确和有效的重要环节。本篇文章将深入探讨Struts2的输入校验机制及其相关知识点。 **输入校验的重要性** 输入校验是Web应用开发中的关键步骤,它可以防止恶意用户提交无效或...
Struts2提供了一种灵活的机制来验证用户输入,通过在Action类中定义校验规则或使用XML配置文件。当用户提交表单时,框架会自动执行这些校验规则,并在验证失败时返回错误信息。这种校验可以在前端(浏览器)或后端...
在Struts2中,输入校验是确保用户提交的数据符合预设规范的重要环节,可以防止非法数据进入系统,保护数据的完整性和安全性。本文将详细探讨Struts2中的输入校验机制。 首先,Struts2提供了两种主要的校验方式:...
本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、以及如何在实际项目中实现数据验证。 **1. Struts2校验框架基础** Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义校验...
例如,可以使用`@Validated`注解来启用校验,使用`@NotBlank`、`@NotEmpty`等JSR303/JSR349的校验注解来指定验证规则。 三、Interceptor级别校验 Struts2的Interceptor(拦截器)允许在Action执行前进行数据校验。...
在Struts2中,数据校验是保证应用程序数据质量的重要环节。短路校验,也称为客户端校验,是一种优化用户体验的策略,它在用户提交表单前就在浏览器端进行数据校验,如果发现错误,会立即反馈给用户,避免了不必要的...
在Struts中,验证规则是通过`<validator>`元素在配置文件中定义的。这些规则主要由以下几个属性控制: 1. **name**:这个属性定义了验证规则的逻辑名称,它在代码中用于引用该规则。 2. **classname** 和 **method...
在Struts2中,数据校验是一个重要的功能,它确保用户输入的数据符合预设的规范,从而保证系统的稳定性和安全性。这篇博客“Struts2 简单数据校验”可能详细介绍了如何在Struts2框架中实现对用户输入的有效性验证。 ...
Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它在Web应用开发中被广泛使用。Struts2的核心在于提供一个强大的、灵活的、可扩展的架构,使得开发者能够更方便地实现业务逻辑与表现层...
在Struts2的配置文件中,我们可以定义这些规则,例如限制上传文件的大小,只接受特定类型的文件(如图片、文档等)。此外,我们还需要关注安全问题,防止恶意文件上传。 文件上传的实现通常包括以下几个步骤: 1. ...
可以使用Struts2的Validator框架,通过定义验证规则文件(如login-validation.xml)来自动执行验证。 6. **会话管理**:如果验证成功,通常会将用户信息存入Session,以便后续页面能识别用户状态。例如,设置`...
在Struts2中,数据校验主要分为三类: 1. `validate()` 方法校验:这是最基本的验证方式,通常在Action类中定义。当用户提交表单时,Struts2会自动调用该方法,对所有字段进行验证。开发者可以在该方法中编写自定义...
本篇文章将详细介绍如何在Struts2中进行输入校验,包括两种主要实现方式:使用Action中的`validate()`方法和使用XML文件。 1. 使用Action中的`validate()`方法: 在Struts2中,每个Action类都可以包含一个名为`...