博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts上路_12-表单验证
阅读量:6652 次
发布时间:2019-06-25

本文共 5057 字,大约阅读时间需要 16 分钟。

hot3.png

1.手工验证:

1)登录表单页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %>Iindex page	
  
用户:
密码:

2)struts.xml:

/successLogin.jsp
/index.jsp

3)Action处理类:

package cn.cvu.action;import com.opensymphony.xwork2.ActionSupport;public class ActionLogin extends ActionSupport {		private String userName; //对应登录页面的
private String passWord; //对应登录页面的
// 1. 为变量提供set方法 public void setUserName(String userName){ this.userName = userName; System.out.println("setUserName:" + userName); } public void setPassWord(String passWord){ this.passWord = passWord; System.out.println("setPassWord:" + passWord); } /* 2. * 重写父类的验证方法 * 父类实现Validateable接口 * 保证setXXX、validate、login3个方法的执行顺序 */ public void validate() { if (userName==null || "".equals(userName)) { //如果result中的页面有
,下面的将错误直接打印在页面上 //参数1:
的fieldName,参数2:自定义错误信息 this.addFieldError("wrong", "用户名不能为空"); } if (passWord==null || "".equals(passWord)) { this.addFieldError("wrong", "密码不能为空"); } System.out.println("validate..."); } // 3. 自定义的方法,对应
public String login(){ System.out.println("login..."); return SUCCESS; }}

4)测试:

5)validate的指定方法验证:

(1)如果表单页面还有其它链接: 

测试validate方法

 

(2)struts.xml配置:

/successLogin.jsp
/index.jsp
/successLogin.jsp
/index.jsp

(3)Action类中增加了test方法:

(4)点击页面无关验证的链接,发现form表单同时发生了验证。 

(5)修改Action类中的validate方法为validateLogin:Login即需要验证的首字母大写的方法名。

(6)再次测试无需验证的<a>链接,转入成功页面:

2.XML验证(框架验证):

1)验证页面:

Iindex page	
用户:
密码:

2)struts.xml:

/successLogin.jsp
  
/index.jsp

3)Action类:

package cn.cvu.action;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class ActionLogin extends ActionSupport {	private String userName; //对应登录页面的
private String passWord; //对应登录页面的
  // 这里没有validate方法   //1.为变量提供set/get方法 public String getUserName() { } public void setUserName(String userName) { } public String getPassWord() { } public void setPassWord(String passWord) { } // 2.自定义的方法,对应
public String login(){ System.out.println("login succes..."); return SUCCESS; }}

4)X-validation.xml验证文件:

在和Action类同级目录中创建*-validation.xml验证文件。

true
true

5)反馈:

不同于手工验证,我们可以在validate方法中指定反馈页面中的<s:fielderror fieldName="wrong">

在XML验证中我们必须保持<s:fielderror>的fieldName="error",即保持默认,无需配置。

6)测试:

7)XML验证的指定方法验证:

上面同手工验证一样,会对整个页面进行验证。以下针对指定请求进行验证。

(1)一个页面,多个请求:

(2)struts.xml配置:

(3)Action处理类:

(4)使用X-validation.xml验证会发生验证错误:

(5)修改验证文件的名称为“Action类名-<action的name>-validation.xml”:

(6)测试:

xml验证指定请求

3.自定义验证规则:

1)新加验证内容:

2)在Action类中增加属性:

3)创建Validate验证器类:

package cn.cvu.action;import com.opensymphony.xwork2.validator.ValidationException;import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;//自定义验证器必须实现 Validator 接口//普通验证继承ValidatorSupport类//字段验证继承FieldValidatorSupport类public class ValidateStature extends FieldValidatorSupport {	// 重新父类的方法。object 表示当前执行的Action对象	public void validate(Object actionLogin) throws ValidationException {		// 根据ActionLogin-ActionLogin_login-validation.xml中的配置		// 此方法验证请求页面的 
// 获取字段的名称 stature String name = this.getFieldName(); System.out.println("name:" + name); // 获取字段的值 Object value = this.getFieldValue(name, actionLogin); System.out.println("value:" + value + "," + value.getClass()); // 不能为空 if (value == null || "".equals(value)) { this.addFieldError(name, actionLogin); } else { Integer stature = Integer.valueOf(value.toString()); System.out.println("stature:" + stature); // 判断身高是否大于0 if (stature <= 0) { // 向页面打印错误信息 this.addFieldError(name, actionLogin); } } }}

4)src目录中创建validators.xml配置:

  

5)在X-<actionName>-validation.xml中使用:

<。。。>
<。。。>
  

6)测试:

 

4.错误提示紧贴属性显示:

其它:

//this.addActionMessage("regist_success");//向页面的
传递信息//this.addActionError(anErrorMessage);//向页面的
传递请求相关错误信息//this.addFieldError(fieldName, errorMessage);//向页面的
传递某字段相关错误信息
 - end

转载于:https://my.oschina.net/vigiles/blog/175647

你可能感兴趣的文章
Shell 脚本条件判断的三中类型(备忘)
查看>>
软件学习遐想
查看>>
JQUERY中 GET与POST方法的区别 Request.QueryString Request.Form区别
查看>>
转载笔记:DropDownList无限级分类(灵活控制显示形式)
查看>>
Design Pattern
查看>>
GDI+ 使用窗体默认字体
查看>>
Silverlight:应用程序和编程模型
查看>>
使用NLog实现一个简单的日志记录(包含源代码)
查看>>
KMP算法模板(C++实现)
查看>>
“.NET研究”Path – 很漂亮,但走错了路子
查看>>
HDU-3952 Fruit Ninja 暴力扫
查看>>
IIS7部署WCF
查看>>
NodeJS扫盲班
查看>>
一只iPhone的全球之旅
查看>>
免费猪八戒网站软件任务小助手--小八戒更新版本1.5
查看>>
UVA 10280 Old Wine Into New Bottles
查看>>
SQL Server 2008 MERGE
查看>>
高性能网站14条——读《高性能网站建设指南》
查看>>
c# 集合类 Dictionary、ArrayList、Hashtable和数组的区别
查看>>
(转载)Everynes NES Hardware Specifications
查看>>