原文来自搬砖工,如需转载请注明出处
博主SSH框架专栏请戳这里http://blog.csdn.net/column/details/14227.html
一、验证的分类
对于我们javaweb应用程序来说,对输入的数据进行验证是必不可少的,数据验证主要分为客户端验证和服务器验证。对于客户端验证,一般是用js实现,通过js函数进行参数验证。对于服务器端验证,就是使用的java代码来对数据进行验证。在Struts2中有专门的服务器验证。
二、Struts2验证
1.Struts2的验证分类
在Struts2中分为手动验证和自动验证,手动验证就是我们自己定义验证函数实现验证逻辑。自动验证则是利用Struts提供的验证,结合我们所写的配置进行输入验证。
2.使用Struts手动验证流程
在Action中实现validate方法,把所以的验证逻辑写在里面。然后把提示信息使用this.addFieldError(params,msg)将提示信息和参数绑定,以确保提示信息显示在正确位置。
3.使用自动验证
需要建立一个配置文件RegistorAction-validation.xml,RegistorAction只要你是对什么Action进行验证就写它的名称。然后在配置文件中写入配置信息就可以了,对什么参数使用什么验证,并且有什么提示信息。
注意:Struts输入验证需要使用Struts的标签创建表单,否则验证信息无法提示
三、实例
1.手动验证
首先创建一个RegistorAction
package com.study.action;
import com.opensymphony.xwork2.ActionSupport;
public class RegistorAction extends ActionSupport{
private String username;
private String password;
private String addr;
private String email;
private int age;
public void validate() {
//只对用户名和密码进行非空验证
if(username==null||username.trim().equals("")){
String msg = "用户名不能为空!";
this.addFieldError("username", msg);
}
if(password==null||password.trim().equals("")){
String msg = "密码不能为空!";
this.addFieldError("password", msg);
}
}
public String execute() throws Exception {
return SUCCESS;
}
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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
两个页面,一个注册页面和成功页面
registor.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<s:form action="registor" method="post">
<s:textfield name="username" label="username"></s:textfield>
<s:password name="password" label="password"></s:password>
<s:textfield name="addr" label="addr"></s:textfield>
<s:textfield name="age" label="age"></s:textfield>
<s:textfield name="email" label="email"></s:textfield>
<s:submit value="regist" label="regist"></s:submit>
</s:form>
</body>
</html>
Success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
</head>
<body>
hello world!,${username}
</body>
</html>
然后就是配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="example" namespace="/" extends="struts-default">
<action name="registor" class="com.study.action.RegistorAction">
<result name="success">/Success.jsp</result>
<result name="input">/registor.jsp</result>
</action>
</package>
</struts>
验证效果
这就是struts2手动验证的实现实例
注意:必须使用struts标签来创建表单,否则不生效
2.自动验证
以手动验证做比较,将Action中的验证方法注释掉,然后我们创建一个RegistorAction-validation.xml,把文件放在Action对应的包下面。
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Definition 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message>用户名不能为空!</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>密码不能为空!</message>
</field-validator>
</field>
</validators>
如果需要Struts2的标签提示,一定得把文件声明写对,不然myeclipse是不会给提示信息的。自动实现的效果和手动验证一样,当然,大家可以把message里面的内容定义为资源文件进行管理。
以上就是Struts2输入验证的全部内容,或许有些地方总结不足,请多多指正。