数据校验指对数据合法性进行检查,根据验证数据的位置可以分为客户端验证和服务器端验证,服务器端数据验证主要特点:
·数据提交后在服务器端验证
·防止绕过客户端验证提交的非法数据
·可以在服务器端处理数据前保证数据的合法性
Struts2中有两种实现服务器端验证的方式。采用手工编写代码实现、基于XML配置方式实现。本文主要介绍基于XML配置方式实现。
在实际开发中,很多验证是相同的,对于这些许重复实现的验证,完全可以统一实现,struts2的验证框架就实现了这一功能。使用验证框架时,所有的验证规则是写在配置文件中,便于开发与维护,所以这里详细介绍一下验证框架。
1、jsp代码编写
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
2、编写Action类和struts.xml配置文件
package struts.org; import com.opensymphony.xwork2.ActionSupport; public class RegisterAction extends ActionSupport{ //需要校验的字段必需在类中提供相应的字段和相应的get,set方法 private String email; private String password; private String repassword; private String phone; public String execute() throws Exception { System.err.println(111); return SUCCESS; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } 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 String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
success.jsp register.jsp
配置文件的命名必须为Xxx-yyy-validation.xml,Xxx为对应的action类名,yyy为配置文件中action元素的name属性值,这个文件只要与对应action类放在同一目录下就会被自动识别,这里命名为RegisterAction-register-validation.xml。
实现效果:${getText("email.not.empty")} ${getText("email.form.error")} ${getText("pass.not.empty")} 6 ${getText("pass.min.lenght")} ${getText("repass.not.same")} ${getText("tel.form.error")}
另外可以使用Dojo插件实现类似于Ajax提交校验的效果
1、首先引入struts2-dojo-plugin-2.3.15.3.jar包
2、修改jsp页面(此处我使用的是另一个新的jsp)
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <%@ taglib prefix="sx" uri="/struts-dojo-tags"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
邮箱 | ||
手机 | ||
重要的是添加
实现效果:
struts客户端校验很简单,在要提交的表单
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
不过需要注意两点:
1、不能配置
2、form标签必须使用struts的标签,即
3、不能直接访问jsp页面,否则会出现如下错误,需要经过action进入jsp。
如果不想使用通过action进入jsp的方法,那么还有另一个解决办法:
即在action属性值后面加.action
实现效果: