struts2中的服务端数据验证框架validate

struts2为我们提供了一个很好的数据验证框架–validate,该框架可以很方便的实现服务端的数据验证。

ActionSupport类提供了一个validate()方法,当我们需要在某一个action中进行数据验证时,可以重写这个方法。数据验证往往是在客户端向服务端提交表单信息时进行的,比如execute方法负责处理表单信息并返回相应的结果,在此之前,validate会先对提交的表单信息进行验证:

->验证通过:会执行execute的相应操作。 ->验证失败: –>定义了失败后的return结果:比如error,会在struts.xml中找到error对应的页面予以显示,并将错误信息按你写的方式展示。 –>未定义return结果,默认返回INPUT,你需要在struts.xml中定义input对应的页面,否则会报错。

需要注意的是,validate会对所有方法都进行数据验证,为了针对某一个方法进行数据验证,可以定义一个方法,方法名为validate+需要验证的方法(首字母大写),比如validateExecute会验证提交给execute的表单数据,validateLogin会验证提交给login方法的表单数据。个人认为尽量不要重写validate方法,而是全部使用validate+方法名的方式来编程。

如果表单中的某个字段不合法,,我们可以返回给客户端,这是要使用addFieldError(“字段name”,”错误信息”)方法来实现。 –> this.addFieldError(“name”,”昵称长度不得小于5”); 会将错误信息显示到name对应的文本框的上方 –> this.addFieldError(“”,”昵称长度不得小于5”); 不会显示错误信息,但是如果在页面上加入会显示在该标签的位置,小编测试发现如果把标签写在表单内部,错误信息将显示在整个表单的上方。

–>如果有多条信息 this.addFieldError(“name”,”昵称长度不得小于5”); this.addFieldError(“password”,”密码长度不得小于12”); 或者 this.addFieldError(“”,”昵称长度不得小于5”); this.addFieldError(“”,”密码长度不得小于12”); 也会全部显示的

下面是一个例子:

1.项目文件如下:

2.web.xml

= “3.0”=”http://java.sun.com/xml/ns/javaee” > >> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter >> ></web-app>

3.struts.xml

<?xml version=”1.0″ encoding= “UTF-8″ ?><!DOCTYPE struts PUBLIC”-//Apache Software Foundation//DTD Struts Configuration 2.0//EN””http://struts.apache.org/dtds/struts-2.0.dtd”><struts><!– struts基本配置内容 –><!–package-name:用于区别不同的package;必须是唯一的、可用的变量名;用于其它package来继承;package- namespace:用于减少重复代码(和struts1比较);是调用action时输入路径的组成部分;package-extends:用于继承其它package以使用里面的过滤器等东东;–>=”” extends= “struts-default”><!–action-name:用于在一个package里区别不同的action;必须是唯一的、可用的变量名;是调用action时输入路径的组成部分;action-class:action所在的路径(包名+类名);action-method:action所调用的方法名; 默认执行execute,所以execute可以不写–>====== “=></struts>

4.UserBean.java

package bean;public class UserBean {//封装表单项,即表单中有的字段,且要相对应private String name;private String password;//封装非表单项,即表单中没有该属性,此处info用来存放服务器返回给页面的信息private String info;public String getName() {return name;}(String name) {this. name = name;}public String getPassword() {return password;}(String password) {this. password = password;}public String getInfo() {return info;}(String info) {this. info = info;}}

5.LoginAction.java

package action;import bean.UserBean;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;/*** Action 用来处理业务逻辑,根据分层的思想,实体对象的属性不宜放在Action中,所以将其封装为实体bean。* * 而要在action中使用该bean,就要使用ModelDriver(模型驱动),使用ModelDriver要继承ModelDriven类。***/public <UserBean>{private UserBean model;@Overridepublic UserBean getModel() {if(model == null){model = new UserBean();}return model;}public String index(){return “index”;}public String execute(){//会自动取出页面表单中的值if(“sa”.equals(this.getModel().getName().trim())&&”aaaaaa”.equals(this.getModel().getPassword().trim())){this.getModel().setInfo(“登陆成功”);return SUCCESS;}else{this.getModel().setInfo(“登陆失败”);return “index”;}}/*** 在执行方法时,验证数据的合法性,方法名是validate+方法名(首字母大写)* 直接写validate会对所有方法都验证*/public void validateExecute(){if(this.getModel().getPassword().trim().length() == 0){.addFieldError(“”, “密码不能为空”);this.addFieldError(“”, “密码不能为空”);}}}

6.login.jsp

> > ==>= “=>></html>无论如何,没有人有办法把自己抑或他人的刺拔掉。那是一碰便痛的软肋,

struts2中的服务端数据验证框架validate

相关文章:

你感兴趣的文章:

标签云: