Struts2验证框架的基本实现
在学习此框架之前,我们先了解下一个好的验证框架都需要考虑什么:
1.验证功能的验证性
2.验证功能的可扩展性
3.验证与业务逻辑的分离
一.使用Struts2中的验证框架
非常简单,只需要添加一个XML,这个XML命名为Action类名-validation.xml (实现了1,2,3),放在需要验证的Action类同包中,其内容为这个Action的execute方法运行之前要对用户的输入进行各种验证。
实例学习:
我们先写一个没有验证文件的例子:
1.封装用户注册信息的域对象
UserModel.java
package bean;
public class UserModel {
private int age;
private String name;
private String account;
public int getAge()
{
return this.age;
}
public void setAge(int age)
{
this.age=age;
}
public String getName()
{
return this.name;
}
public void setName(String name)
{
this.name=name;
}
public String getAccount()
{
return account;
}
public void setAccount(String account)
{
this.account=account;
}
}
2.Action编写
package cn.javass.hello.struts2impl.action;
import com.opensymphony.xwork2.ActionSupport;
import bean.Session;
import bean.UserModel;
public class HelloWorldAction extends ActionSupport{
public UserModel user=new UserModel();
public String execute() throws Exception{
this.businessExecute();
return this.SUCCESS;
}
public void businessExecute()
{
System.out.println("传入的数据="+user);
}
}
3.在Struts.xml里配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<constant name="struts.locale" value="zh_CN"/>
<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<package name="struts2" extends="struts-default" namespace='/'>
<action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">
<result name="success">/Text01/welcome.jsp</result>
</action>
</package>
</struts>
4.Jsp文件编写
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@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=UTF-8">
<title>Insert title here</title>
</head>
<body>
用户注册
<hr/>
<s:form action="/struts2/helloworldAction.action" method="post">
账号 <s:textfield name="user.account" lable="账号"/>
姓名 <s:textfield name="user.name" lable="姓名"/>
年龄 <s:textfield name="user.age" lable="年龄"/>
<s:submit value="注册"/>
</s:form>
</body>
</html>
welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<%@taglib prefix="s" uri="/struts-tags" %>
欢迎账号为<s:property value="user.account"/>的朋友来访<br/>
</body>
</html>
下面我们来加入验证文件:
HelloWorldAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="user.account">
<field-validator type="requiredstring">
<message>请输入账号</message>
</field-validator>
</field>
</validators>
然后再struts.xml文件的< action>中插入:
<result name="input">/Text01/index.jsp</result>
完整的如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.devMode" value="false"/>
<constant name="struts.locale" value="zh_CN"/>
<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<package name="struts2" extends="struts-default" namespace='/'>
<action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">
<result name="input">/Text01/index.jsp</result>
<result name="success">/Text01/welcome.jsp</result>
</action>
</package>
</struts>
我们运行看看:

从上面的使用我们可以看到验证框架的使用只需要增加一个验证文件,再为Action配置一个名为input的Result就可以了。
但是验证框架到底是如何运行的呢?
1.关键点是拦截器
在Struts2中,要为Action配置相应的验证功能,需要引用validation拦截器。
此拦截器的作用是验证值栈中相应的内容,而值栈中的这些内容来自于请求参数部分。
也就是说,我们从index.jsp里填完数据点击提交后,拦截器验证值栈的内容是否符合验证文件的要求,如符合则调用action方法,否则调用input视图,流程图如下:

浙公网安备 33010602011771号