您的位置:首页 > 编程语言 > Java开发

Struts2(六)手工编码方式进行输入校验

2015-06-21 15:49 441 查看
输入校验的流程

1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性

2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息封装到fieldError里。不管类型转换是否出现异常,都会进入第3步。

3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。

4、再调用action中的validate()方法

5、经过上面4步,如果系统中的fieldError存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldError没有任何错误信息,系统将执行action中的处理方法。

在struts2中,我们可以实现对action的所有方法进行校验,也可以实现对action的指定方法进行校验。

对于输入校验struts2提供两种实现方法:

1、采用手工编写代码实现
2、基于XML配置方式实现

相对于第一种,第二种用起来比较方便。

登录页面index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>输入校验</title>
</head>

<body>
<s:fielderror/>
<form action="${pageContext.request.contextPath}/control/manage_save.action" method="post">
管理用户名:<input type="text" name="username" />不能为空<br>
手机号码:<input type="text" name="mobilephone" /> 不能为空,并且要符合手机号码格式1,3/5/8,后面9位数字<br>
<input type="submit" value="提交" />
</form>
</body>
</html>
package struts2.validate.action;

import java.util.regex.Pattern;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class PersonAction extends ActionSupport{

private String username;
private String mobilephone;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getMobilephone() {
return mobilephone;
}

public void setMobilephone(String mobilephone) {
this.mobilephone = mobilephone;
}

public String update() {
ActionContext.getContext().put("message", "更新成功!");
return "message";
}

public String save() {
ActionContext.getContext().put("message", "保存成功");
return "message";
}

//对action中的所有方法校验
@Override
public void validate() {
if(this.username==null || this.username.trim().equals("")){
this.addFieldError("username", "用户名不能为空!");
}
if(this.mobilephone==null || this.mobilephone.equals("")){
this.addFieldError("mobilephone", "手机号不能为空!");
}else{
if(!Pattern.compile("^1[358]\\d{9}$").matcher(mobilephone).matches()){
this.addFieldError("mobilephone", "手机号格式不正确!");
}
}
super.validate();
}

}
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>结果</title>
</head>

<body>
${message}
</body>
</html>
通过重写validate()方法实现,validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息
<?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>
<package name="csdn" namespace="/control" extends="struts-default">
<action name="manage_*" class="struts2.validate.action.PersonAction" method="{1}">
<result name="message">/WEB-INF/page/message.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>


validate()方法会对action中的所有方法进行校验,如果只需要对指定方法进行校验,可通过重写validateXxx()方法实现,validateXxx()只会校验action中方法名为Xxx()的方法。其中Xxx()的第一个字母要大写。其他配置书写步骤和写validate()方法一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: