输入校验

一. 基本校验
1. 页面:register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>Insert title here</title>
</head>
<body>
<table width="40%" align="center" border="0">
<tr>
<td>
<s:actionerror cssStyle="color:red"/>
--------------------------------------------
<s:fielderror cssStyle="color:blue"></s:fielderror>
</td>
</tr>
</table>
<form action="register.action" method="post">
<table width="40%" align="center" border="1">
<tr>
<td>username:</td>
<td><input type="text" name="username" size="20"/></td>
</tr>
<tr>
<td>password:</td>
<td><input type="password" name="password" size="20"/></td>
</tr>
<tr>
<td>re-password:</td>
<td><input type="password" name="repassword" size="20"/></td>
</tr>
<tr>
<td>age:</td>
<td><input type="text" name="age" size="20"/></td>
</tr>
<tr>
<td>birthday:</td>
<td><input type="text" name="birthday" size="20"/></td>
</tr>
<tr>
<td>graduaction:</td>
<td><input type="text" name="graduaction" size="20"/></td>
</tr>
<tr>
<td><input type="submit" value="submit"/></td>
<td><input type="reset" value="reset"/></td>
</tr>
</table>
</form>
</body>
</html>


2.控制器:RegisterAction.java


package com.test.action;

import java.util.Calendar;
import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {

private String username;
private String password;
private String repassword;
private int age;
private Date birthday;
private Date graduaction;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getGraduaction() {
return graduaction;
}
public void setGraduaction(Date graduaction) {
this.graduaction = graduaction;
}

@Override
public String execute() throws Exception {
System.out.println("execute invoked");
return SUCCESS;
}

@Override
public void validate() {
System.out.println("invalid=========================");

if(null==username||username.length()<6||username.length()>10){
this.addActionError("username invalid");
//this.addFieldError("username", "field error: invalid username");
}
if(null==password||password.length()<6||password.length()>10){
this.addActionError("password invalid");
}else if(null==repassword||repassword.length()<6||repassword.length()>10){
this.addActionError("repassword invalid");
}else if(!password.equals(repassword)){
this.addActionError("two password should be the same");
}
if(age<1||age>150){
this.addActionError("age invalid");
//this.addFieldError("age", "field error: invalid age");
}
if(null==birthday){
this.addActionError("birthday invalid");
}
if(null==graduaction){
this.addActionError("graduaction invalid");
}
if(null!=birthday&&null!=graduaction){
Calendar c1=Calendar.getInstance();
c1.setTime(birthday);
Calendar c2=Calendar.getInstance();
c2.setTime(graduaction);
if(c1.after(c2)){
this.addActionError("birthday should be before graduaction");
}
}

}
}


3.配置文件:struts.xml

<action name="register" class="com.test.action.RegisterAction" >
<result name="success">/success.jsp</result>
<result name="input">/register.jsp</result>
</action>

4. 友好提示(相当于国际化):RegisterAction.properties(放到Action相同的包下)
注:这是类型转换错误时系统添加的提示,另invalid.fieldvalue.是固定的

invalid.fieldvalue.username=\u7528\u6237\u540D\u4E0D\u5408\u6CD5
invalid.fieldvalue.age=\u5E74\u9F84\u4E0D\u5408\u6CD5
invalid.fieldvalue.birthday=\u751F\u65E5\u4E0D\u5408\u6CD5
invalid.fieldvalue.graduaction=\u6BD5\u4E1A\u65F6\u95F4\u4E0D\u5408\u6CD5

二. 同一个Action中,不同方法的不同验证
1. 改配置文件:struts.xml

<action name="register" class="com.test.action.RegisterAction" method="test">
<result name="success">/success.jsp</result>
<result name="input">/register.jsp</result>
</action>

2. 改Action:RegisterAction.java
注:自定义校验方法名,是validate加上执行方法名,执行方法名首字母大写,另执行完自定义的校验后还会去执行默认的validate验证方法。

package com.test.action;

import java.util.Calendar;
import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {

private String username;
private String password;
private String repassword;
private int age;
private Date birthday;
private Date graduaction;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getGraduaction() {
return graduaction;
}
public void setGraduaction(Date graduaction) {
this.graduaction = graduaction;
}

@Override
public String execute() throws Exception {
System.out.println("execute invoked");
return SUCCESS;
}

public String test() throws Exception {
System.out.println("test invoked");
return SUCCESS;
}

public void validateTest(){
System.out.println("invalidTest=========================");

if(null==username||username.length()<6||username.length()>10){
this.addActionError("username invalid");
//this.addFieldError("username", "field error: invalid username");
}
if(null==password||password.length()<6||password.length()>10){
this.addActionError("password invalid");
}else if(null==repassword||repassword.length()<6||repassword.length()>10){
this.addActionError("repassword invalid");
}else if(!password.equals(repassword)){
this.addActionError("two password should be the same");
}
if(age<1||age>150){
this.addActionError("age invalid");
//this.addFieldError("age", "field error: invalid age");
}
if(null==birthday){
this.addActionError("birthday invalid");
}
if(null==graduaction){
this.addActionError("graduaction invalid");
}
if(null!=birthday&&null!=graduaction){
Calendar c1=Calendar.getInstance();
c1.setTime(birthday);
Calendar c2=Calendar.getInstance();
c2.setTime(graduaction);
if(c1.after(c2)){
this.addActionError("birthday should be before graduaction");
}
}
}

@Override
public void validate() {

System.out.println("invalid=========================");

if(null==username||username.length()<6||username.length()>10){
this.addActionError("username invalid");
//this.addFieldError("username", "field error: invalid username");
}
if(null==password||password.length()<6||password.length()>10){
this.addActionError("password invalid");
}else if(null==repassword||repassword.length()<6||repassword.length()>10){
this.addActionError("repassword invalid");
}else if(!password.equals(repassword)){
this.addActionError("two password should be the same");
}
if(age<1||age>150){
this.addActionError("age invalid");
//this.addFieldError("age", "field error: invalid age");
}
if(null==birthday){
this.addActionError("birthday invalid");
}
if(null==graduaction){
this.addActionError("graduaction invalid");
}
if(null!=birthday&&null!=graduaction){
Calendar c1=Calendar.getInstance();
c1.setTime(birthday);
Calendar c2=Calendar.getInstance();
c2.setTime(graduaction);
if(c1.after(c2)){
this.addActionError("birthday should be before graduaction");
}
}
}
}

三. Struts2标签库自带获取fielderror
1. login2.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<s:form action="login">
<s:textfield name="username" label="username" ></s:textfield>
<s:password name="password" label="password"></s:password>
<s:submit value="submit"></s:submit>
</s:form>

</body>
</html>

2. LoginAction.java

package com.test.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{

private String username;
private String password;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

public String execute() throws Exception{
return "success";
}

@Override
public void validate() {
if(username!=null&&-1!=username.indexOf("hello")){
this.addFieldError("username", "username invalid");
}
if(password!=null&&password.length()<4){
this.addFieldError("password", "password invalid");
}
}
}

四. 验证框架
1. 修改下RegisterAction.java

package com.test.action;

import java.util.Calendar;
import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {

private String username;
private String password;
private String repassword;
private int age;
private Date birthday;
private Date graduaction;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getGraduaction() {
return graduaction;
}
public void setGraduaction(Date graduaction) {
this.graduaction = graduaction;
}

@Override
public String execute() throws Exception {
System.out.println("execute invoked");
return SUCCESS;
}

// public String test() throws Exception {
// System.out.println("test invoked");
// return SUCCESS;
// }
//
// public void validateTest(){
// System.out.println("invalidTest=========================");
//
// if(null==username||username.length()<6||username.length()>10){
// this.addActionError("username invalid");
// //this.addFieldError("username", "field error: invalid username");
// }
// if(null==password||password.length()<6||password.length()>10){
// this.addActionError("password invalid");
// }else if(null==repassword||repassword.length()<6||repassword.length()>10){
// this.addActionError("repassword invalid");
// }else if(!password.equals(repassword)){
// this.addActionError("two password should be the same");
// }
// if(age<1||age>150){
// this.addActionError("age invalid");
// //this.addFieldError("age", "field error: invalid age");
// }
// if(null==birthday){
// this.addActionError("birthday invalid");
// }
// if(null==graduaction){
// this.addActionError("graduaction invalid");
// }
// if(null!=birthday&&null!=graduaction){
// Calendar c1=Calendar.getInstance();
// c1.setTime(birthday);
// Calendar c2=Calendar.getInstance();
// c2.setTime(graduaction);
// if(c1.after(c2)){
// this.addActionError("birthday should be before graduaction");
// }
// }
// }
//
// @Override
// public void validate() {
//
// System.out.println("invalid=========================");
//
// if(null==username||username.length()<6||username.length()>10){
// this.addActionError("username invalid");
// //this.addFieldError("username", "field error: invalid username");
// }
// if(null==password||password.length()<6||password.length()>10){
// this.addActionError("password invalid");
// }else if(null==repassword||repassword.length()<6||repassword.length()>10){
// this.addActionError("repassword invalid");
// }else if(!password.equals(repassword)){
// this.addActionError("two password should be the same");
// }
// if(age<1||age>150){
// this.addActionError("age invalid");
// //this.addFieldError("age", "field error: invalid age");
// }
// if(null==birthday){
// this.addActionError("birthday invalid");
// }
// if(null==graduaction){
// this.addActionError("graduaction invalid");
// }
// if(null!=birthday&&null!=graduaction){
// Calendar c1=Calendar.getInstance();
// c1.setTime(birthday);
// Calendar c2=Calendar.getInstance();
// c2.setTime(graduaction);
// if(c1.after(c2)){
// this.addActionError("birthday should be before graduaction");
// }
// }
// }
}

2. 在RegisterAction.java包下增加校验文件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="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>username required</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">12</param>
<message>username should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>

<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>password required</message>
</field-validator>

<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">12</param>
<message>password should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>

<field name="repassword">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>repassword required</message>
</field-validator>

<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">12</param>
<message>repassword should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>

<field name="age">
<field-validator type="required">
<message>age required</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>age should be between ${min} and ${max}</message>
</field-validator>
</field>

<field name="birthday">
<field-validator type="required">
<message>birthday required</message>
</field-validator>
<field-validator type="date">
<param name="min">1900-1-1</param>
<param name="max">2200-1-1</param>
<message>birthday should be between ${min} and ${max}</message>
</field-validator>
</field>

<field name="graduaction">
<field-validator type="required">
<message>graduaction required</message>
</field-validator>
<field-validator type="date">
<param name="min">1920-1-1</param>
<param name="max">2200-1-1</param>
<message>graduaction should be between ${min} and ${max}</message>
</field-validator>
</field>
</validators>

注:以上是field级别的校验,还有validator级别的校验,两种级别效果是一样的,如下:

<?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">
<param name="fieldName">username</param>
<message>username required</message>
</validator>

<validator type="stringlength">
<param name="fieldName">username</param>
<param name="minLength">6</param>
<param name="maxLength">12</param>
<message>username should be between ${minLength} and ${maxLength}</message>
</validator>
<validators>

总结:
1.首先执行类型转换
2.执行对应的校验框架
3.执行特定方法对应的validate验证(test,validateTest)
4.执行validate()方法
如果在以上所有过程中,发现了任何错误,都不会再去执行execute()方法或
指定的特定方法(test),页面转向了struts.xml中input这个result所指向的页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值