Struts的校验方式
Struts的校验
Struts验证:JS,框架验证,Actionsupport验证
JS验证不用多说,要注意的是使用Struts标签时注意该赋值ID,name什么的别忘记。
框架验证,通过对类写一个对应的校验XML配置文件,文件中把条件限制写进去还有对应的提示语
Actionsupport验证,struts有对应的validate()和validateXXX()来代码校验,他会先执行对应的validate方法,再执行对应的业务方法(validateXXX()是校验XXX方法比validate优先级别高且也是最常用,例如:validateConfirm()对应校验的是Confirm(),也就是说执行Confirm方法前先进行校验)
- 前台校验
这事靠JS来实现的,但我们这边探讨的是struts2这边,页面会使用到struts
标签甚至是自定义的标签(有的时候将项目样式统一风格,会自定义标签使用,我们项目就使用了自己定义的标签对head,body,form进行风格统一。),其实差别很小很小的的,只不过你有时候用的是那种简单的HTML时间长不了解struts标签可能会有点没头绪。
这张截图是我们自定义标签(你也可以自己去定义属于你自己的标签,网上一大堆方法,我是个渣审美也不高,所以只知道定义但是没有去完善自己的标签)
我们选择一个关于checkbox的校验js来做例子(就是一个声明点击checkbox,表示以看完声明,同意点击checkbox,如果不点击会弹框提示),首先我们写两个触发事件,一个是reset,一个是提交,由提交来处理checkbox校验
对应的写好对应的checkbox(用到了struts标签)
Id很重要因为用到了struts标签会有影响,跟一般的HTML,JSP不同,我有一同事因为没定义对应的js没反应。
还有就是js书写,注意写法
2框架验证
根据Action类写对应的配置文件,命名方式如下:Action,对应的配置文件ActionName-validate.xml
Action:
package com.pb.web.action;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.opensymphony.xwork2.ActionSupport;
import com.pb.entity.User;
public class UserAction3 extends ActionSupport {
private User user;
public String register() throws Exception {
System.out.println("=========完成注册信息======");
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
对应的配置文件(在同一级目录下配置文件)
<?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.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">16</param>
<param name="trim">true</param>
<message>用户名必须为${minLength}至${maxLength}个字符!,当前为${user.username}</message>
</field-validator>
</field>
<!--密码 -->
<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不能为空!</message>
</field-validator>
<field-validator type="stringlength">
<!--去掉前后的空格 -->
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">20</param>
<message>密码必须为${minLength}至${maxLength}个字符,当前为${user.password}</message>
</field-validator>
</field>
<!--年龄 -->
<field name="user.age">
<field-validator type="required">
<param name="trim">true</param>
<message>年龄不能为空</message>
</field-validator>
<field-validator type="int">
<param name="trim">true</param>
<param name="min">1</param>
<param name="max">200</param>
<message>年龄为${min}---${max}岁之间</message>
</field-validator>
</field>
<field name="user.email">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>邮箱不能为空</message>
</field-validator>
<field-validator type="email">
<param name="trim">true</param>
<message>邮箱格式不正确!</message>
</field-validator>
</field>
</validators>
对应的jsp
`这里写代码片`<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册页面</title>
</head>
<body>
<!-- 判断字段是否有错误信息-->
<s:if test="hasFieldErrors()">
<h1 align="center">输出错误字段信息</h1>
<div align="center" style="color:blue;">
使用s:fielderror输出全部的错误信息
<s:fielderror />
</div>
</s:if>
<h1>ActionName-validation.xml较验</h1>
<!-- 必须加上namespace不然不起作用-->
<s:form action="register3.action" method="post" namespace="/" >
<s:textfield label="用户名" name="user.username"/>
<s:password label="密码" name="user.password"/>
<s:textfield label="年龄" name="user.age" />
<s:textfield label="邮箱" name="user.email"/>
<s:submit value="提交" /><s:reset value="重置" /><br/>
</s:form>
<s:debug/>
</body>
</html>
3ActionSupport
Struts支持这种验证validateXXX()和validate(),觉得还是validateXXX()这种更好看起来更直观。
来看一下JSP,注意validate=’true’,这样针对Confirm验证方法ValidateConfirm就可以生效
太长了就不贴了(注意一下struts标签的select写法)
顺便贴一下工具类inputchecker工具类里面的方法
里面方法太多了,有很多值得看一下,比如检查是否是输入的只有字母大小写等,这些都很有用。
(这个博客太不友好,我已经都把东西写好放在word上,竟然不能弄过来,图片必须先上传无语。影响体验,希望能改进直接贴图上去。)
上一篇: 正则匹配有关问题,求前辈指导.