Struts2中请求参数校验

在Struts2中,请求参数的校验要放在服务端进行。其实我们在做.NET的项目时,使用过EasyUI,EasyUI有各种校验机制,那会是在客服端就直接对输入参数进行了校验。但是我们的Struts框架也是蛮强大的,它本身就给我们提供了非常详细的校验机制。

1.手动校验

使用手动校验,需要一下这么几个条件:

①你的Action要继承ActionSupport接口;

②重写validate接口,如果属性有问题,通过addFieldError(String,String)方法存储错误信息.

③如果向fieldError中存储了错误信息,workflow拦截器就会跳转到input视图.

④在input视图上通过<s:fielderror>来显示错误信息.可以通过 <s;fielderror fieldName="">

代码展示:

package cn.tgb.action;

import cn.tgb.model.People;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class PeopleAction01 extends ActionSupport implements ModelDriven<People>{
	private People people = new People();
	@Override
	public People getModel() {
		return people;
	}	

	public String register(){
		System.out.println(people.getUsername()+"注册成功了~");
		return null;
	}

	public String longin(){
		System.out.println(people.getUsername()+"登陆成功了~");
		return null;
	}

	//重写ActionSupport中的validate方法
	@Override
	public void validate() {
		System.out.println("参数校验");
	}

	public void validateRegedit(){
		System.out.println("注册方法参数校验");
	}

	public void validateLogin(){
		System.out.println("注册方法参数校验");
	}
}

2.配置校验

使用配置校验,需要满足下面的条件:

①你的Action要继承ActionSupport接口;

②创建一个xml文件来校验,这个xml文件要和Action在同一个包下,命名ActionClassName_validation.xml;如果一个Action中有多个方法,如果我们要针对该方法进行校验的话,将xml文件命名为ActionClassName-actionName-validation.xml即可。

③在xml文件中配置校验。

代码展示:

加入我们对PropelAction中的register()方法进行校验,xml文件的命名为:PeopleAction-register-validation.xml.配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
	"-//Apache Struts//XWork Validator 1.0.3//EN"
	"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>

	<field name="username">
		<!-- 校验用户名不能为空 -->
		<field-validator type="requiredstring">
			<message>用户名不能为空!</message>
		</field-validator>
		<!-- 校验用户名长度必须在6-10位之间 -->
		<field-validator type="stringlength">
			<param name="maxLength">10</param>
			<param name="minLength">6</param>
			<message>用户名必须在${minLength}-${maxLength}位之间</message>
		</field-validator>
	</field>

	<!-- 校验age属性必须在10-80之间 -->
	<field name="age">
		<field-validator type="int">
			<param name="min">10</param>
			<param name="max">80</param>
			<message>年龄必须在${min}-${max}之间</message>
		</field-validator>
	</field>

	<!-- 校验生日范围 -->
	<field name="birthday">
		<field-validator type="date">
			<param name="max">2004-12-31</param>
			<param name="min">1934-01-01</param>
			<message>生日必须在 1934年01月01日到2004年12月31日之间</message>
		</field-validator>
	</field>

	<!-- 校验邮箱 -->
	<field name="email">
		<field-validator type="email">
			<message>邮箱格式化不正确</message>
		</field-validator>
	</field>

	<!-- 主页校验 -->
	<field name="myurl">
		<field-validator type="url">
			<message>格式不正确</message>
		</field-validator>
	</field>

	<!-- 对telphone信息使用正则校验 -->
	<field name="telphone">
		<field-validator type="regex">
			<param name="regexExpression"><![CDATA[^139\d{8}$]]></param>
			<message>格式不正确,必须是139开始</message>
		</field-validator>
	</field>

	<field name="repassword">
		<field-validator type="fieldexpression">
			<param name="expression"><![CDATA[(password==repassword)]]></param>
			<message>两次密码输入不一致</message>
		</field-validator>
	</field>
</validators>	

总结:在struts学习的这块,一定要和前面学习的ASP.NET MVC结合起来,这样对理论的理解和比较快;在一个就是要多多动手实践,很多时候看视频中的代码逻辑很简单,但是让自己敲却不一定敲的出来。而且敲代码的也可以加深自己的知识点的理解,实现代码也会提高自己的兴趣和自信心,何乐而不为呢?

时间: 2024-10-06 01:20:07

Struts2中请求参数校验的相关文章

Struts2中请求参数的接收方式和ModelDriven机制及其运用

odelDriven 为什么需要ModelDriven 所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象.比如,有实体类User如下: package cn.com.leadfar.struts2.actions; public class User { private int id; private String username; private String password; private int age; private String address; publi

Struts2(三)struts2处理请求参数及其校验

一.Action处理请求参数 1.Action处理请求参数三种方式 1.1.Action 本身作为model对象,通过成员setter封装 (属性驱动 ) // 页面: 用户名 <input type="text" name="username" /> <br/> // Action : public class RegistAction1 extends ActionSupport { private String username; pu

action中请求参数获取的两种方式

action中请求参数获取的两种方式 1.属性驱动? a.直接在 action 类中提供与请求参数匹配属性,提供 get/set 方法? b.在 action 类中创始一个 javaBean,对其提供 get/set ,在请求时页面上要进行修改,? 例如 user.username user.password ,要使用 ognl 表达式? 以上两种方式的优缺点:? 第一种比较简单,在实际操作我们需要将 action 的属性在赋值给模型(javaBean)去操作? 第二种:不需要在直接将值给 ja

Struts2中带参数的结果集

1.在Struts2中带参数的结果集,即向结果集传参.struts2中有转发和重定向到某个视图,其中转发的过程在服务端完成,这个过程共享一个value stack(值栈),客户端并不知道页面跳转到了哪个jsp页面,其地址栏中显示的是所请求的action地址:在这个转发的过程中,参数值是共享的.其中重定向的话,服务器收到请求后,发现需要重定向,然后把需要重新访问的请求地址发给客户端,客户端重新发起请求,这个过程中,客户端知道自己访问的jsp页面的具体地址,其地址栏显示的是jsp页面的实际地址,并且

Struts2请求参数校验

校验的分类 客户端数据校验 和 服务器端数据校验 客户端数据校验 ,通过JavaScript 完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,通过Java代码 完成校验 struts2 支持校验方式 代码校验(用的很少) :在服务器端通过编写java代码,完成数据校验 配置校验(主流):XML配置校验(主流) 和 注解配置校验 代码校验请求参数 步骤一: 封装数据 步骤二: 实现校验Action ,必须继承ActionSupport 类 步骤三: 覆盖validate方法(val

Struts2 -- 获取请求参数

1.直接将action做一个model,就可以得到请求参数. 缺点:需要单独定义javaBean,将action中属性copy到javaBean中.                     优点:简单.                                 这种方式 ,底层是通过反射来实现的. //获取请求参数 属性驱动 第一种,直接将action做为model public class DemoAction extends ActionSupport { private String

深入分析JavaWeb 45 -- Struts2封装请求参数与类型转换

作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中,Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装. 1.Struts2 提供三种数据封装的方式 Action 本身作为model对象,通过成员setter封装 创建独立model对象,页面通过ognl表达式封装 使用ModelDriven接口,对请求数据进行封装 1. 方式一:在动作类中成员变量给予初始值. 在配置文件中struts.xml中 <package name="p1&q

自定义struts2中action参数类型转换器

DateAction.java中代码如下: package com.itheima.action; import java.util.Date; public class DateAction { private Date time; public Date getTime() { return time; } public void setTime(Date time) { this.time = time; } public String execute() { return "succes

struts2中服务器端数据校验

数据校验指对数据合法性进行检查,根据验证数据的位置可以分为客户端验证和服务器端验证,今天随笔主要写的是实现服务器端的数据验证,服务器端数据验证主要特点: ·数据提交后在服务器端验证 ·防止绕过客户端验证提交的非法数据 ·可以在服务器端处理数据前保证数据的合法性 Struts2中有两种实现服务器端验证的方式. 一.       使用ActionSupport编码实现验证 在Action类的方法中直接验证 在Action 类中直接进行校验是一种最为原始的方法,这里作为了解,首先是action 类中的