struts2使用验证文件实现校验
原创
struts2框架提供了一种基于验证文件的输入验证方式,将验证规则保存在特定的验证文件中。
验证文件的命名规则
一般情况下,验证文件的命名规则是:Action类名-validation.xml。如果一个Action有多个逻辑处理方法,
要为某个特定方法做验证,其命名规则是:Action类型-Action逻辑名-validation.xml(其中,Action逻辑名是指struts.xml中的对应该处理方法的action配置中的name值)。
struts2框架中提供了大量的内置校验器,在项目开发中,大部分校验功能都可以通过内置校验器来完成。struts2框架提供两种配置校验器的方式:字段校验器配置风格和非字段校验器配置风格。
下面通过字段校验器配置风格来举例。
一个客户输入验证如下:
客户输入界面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ 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> <title>注册页面</title>
<style type="text/css">
body{font-size:12px;}
#title{color:#FF7B0B;font-size:20px;font-weight:bold;}
.td{height:30px;}
.info{color:#BBBBBB;}
</style>
<script language="javascript">
function check(frm){
if(frm.accept.checked==false){
alert("您需要仔细阅读用户使用协议,并同意接受协议!");
return false;
}
return true;
}
</script>
</head> <body>
<s:fielderror cssStyle="color:red"></s:fielderror>
<s:form action="register" method="post" theme="simple" onsubmit="return check(this)" namespace="/">
<table border="0" align="center" width="1000">
<tr><td colspan="3" align="center" height="40" id="title">填写注册信息<br/></td></tr>
<tr><td align="right">用户名:*</td><td><s:textfield name="user.userName"/></td><td class="info">用户名由字母开头,后跟字母、数字或下划线!</td></tr>
<tr><td align="right">密码:*</td><td><s:password name="user.userPwd"/></td><td class="info">设置登录密码,至少6位!</td></tr>
<tr><td align="right">确认密码:*</td><td><s:password name="userPwd"/></td><td class="info">请再输入一次你的密码!</td></tr>
<tr><td align="right">性别:*</td><td><s:radio name="user.userSex" list="{'男','女'}"/></td><td class="info">请选择你的性别!</td></tr>
<tr><td align="right">邮箱地址:*</td><td><s:textfield name="user.userEmail"/></td><td class="info">请填写您的常用邮箱,可以用此邮箱找回密码!</td></tr>
<tr><td align="right" valign="top">基本情况:*</td><td colspan="2"><s:textarea name="user.userBasicInfo" rows="5" cols="50"/></td></tr>
<tr><td colspan="3" align="center" height="40"><s:checkbox name="accept" value="false"/>我已经仔细阅读并同意接受用户使用协议</td></tr>
<tr><td colspan="3" align="center" height="40"><input type="submit" value="确认"/> <input type="reset" value="取消"/></td></tr>
</table>
</s:form>
</body>
</html>

创建保存用户信息的JavaBean
public class User {
private String userName;
private String userPwd;
private String userSex;
private String userEmail;
private String userBasicInfo;
public User(){};
public String getUserName() {
return userName;
}
public void setUserName(String usreName) {
this.userName = usreName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public String getUserBasicInfo() {
return userBasicInfo;
}
public void setUserBasicInfo(String userBasicInfo) {
this.userBasicInfo = userBasicInfo;
}
}
创建Acion验证输入:
package Action;
import JavaBean.User;
import java.sql.*;
import com.opensymphony.xwork2.ActionSupport;
import java.util.regex.*;
import DBase.connection;
public class register extends ActionSupport{
private User user;
private String userPwd;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
} public boolean add(){
Connection con=connection.getConnection(); //获取数据库连接
String sql="insert into Users(username,userpwd,usersex,useremail,userbasicinfo) values(?,?,?,?,?)";
try {
PreparedStatement pre=con.prepareStatement(sql);
pre.setString(1,user.getUserName());
pre.setString(2, user.getUserPwd());
pre.setString(3, user.getUserSex());
pre.setString(4, user.getUserEmail());
pre.setString(5, user.getUserBasicInfo());
int n=pre.executeUpdate();
if(n==1){
return true;
}
} catch (SQLException e) {
System.out.println("error");
return false;
}
return false;
}
public String regist() throws Exception{
if(add()==true){
return "success";
}else{
return "input";
}
}
}
struts.xml的配置
<struts>
<!-- Overwrite Convention -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-showcase"/> <constant name="struts.convention.package.locators" value="example"/> <!-- Uncomment the lines below to use Jackson XML bindings instead of the XStream library to handle XML serialisations -->
<!--
<bean name="jacksonXml" type="org.apache.struts2.rest.handler.ContentTypeHandler" class="org.apache.struts2.rest.handler.JacksonXmlHandler" />
<constant name="struts.rest.handlerOverride.xml" value="jacksonXml"/>
--> <package name="default" namespace="/" extends="struts-default">
<!-- 定义拦截器 -->
<global-allowed-methods>index,show,create,update,destroy,deleteConfirm,edit,editNew</global-allowed-methods>
<!-- 配置action -->
<action name="register" class="Action.register">
<result name="success">/register283/Success.jsp</result>
<result name="input">/register283/regist.jsp</result>
</action>
</package>
</struts>
success.jsp
<%@ page language="java" import="java.util.*" 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">
<html>
<head>
<base href="<%=basePath%>"> <title>校验成功</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
校验通过,用户信息如下:
<hr>
用户名:<s:property value="user.userName"/><br>
密码:<s:property value="user.userPwd"/><br>
确认密码:<s:property value="userPwd"/><br>
性别:<s:property value="user.userSex"/><br>
邮箱地址:<s:property value="user.userEmail"/><br>
基本情况:<s:property value="user.userBasicInfo"/>
</body>
</html>

成功页面

18:19:03
2018-11-16
struts2使用验证文件实现校验的更多相关文章
- 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...
- struts2学习笔记--使用Validator校验数据
我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等. 常用的Vali ...
- Struts2基础数据校验和框架校验
一:三种校验的方式 1.用validate()方法实现数据校验 2.用execute()方法实现数据校验 3.用validateXxx()方法实现数据校验 1.用validate()方法实现数据校验 ...
- Struts2 框架验证
struts2框架验证(xml方式): * 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法 * 创建一个xml格式验证文 ...
- Struts2学习笔记(九)——数据校验
Struts2的数据校验属于服务器端校验,Struts2 支持校验方式 : 手动校验(代码校验) :在服务器端通过编写java代码,完成数据校验 自动校验(配置校验) :XML配置校验(主流) 和 注 ...
- Struts2数据验证机制
1. 手动验证的实现 只需要在继承ActionSupport类的情况下,直接重写validate()方法即可.使用validate()方法可以对用户请求的多个Action方法进行验证,但其验证的逻辑是 ...
- struts2的验证
1.原理 当浏览器向服务器提交表单数据时,在服务器端需要对表单数据的有效性进行校验. “校验方法”会在“业务方法”之前调用. 2.实现验证的两种方式 struts2校验的两种实现方法: 1. 手工编写 ...
- struts2 validate验证
转自:https://blog.csdn.net/houpengfei111/article/details/9038233 自定义拦截器 要自定义拦截器需要实现com.opensymphony.xw ...
- struts2 的验证框架validation如何返回json数据 以方便ajax交互
struts2 的验证框架validation简单,好用,但是input只能输出到jsp页面通过struts2的标签<s:fielderror />才能取出,(EL应该也可以). 如果使 ...
随机推荐
- JSR-303 结合spring 校验
使用注解 一.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Final.jar是对上述接口的实现: ...
- preprocess
1,宏定义,有参宏,无参宏,宏定义实现的是定义一个符号常量; 条件编译3种方式,文件包含含义; 不带参数的宏定义;既用一个指定的的标识符来代替一个字符串; #define RUIY 10000000 ...
- C# 设计模式-单例模式(Singleton)
所谓单例模式即所谓的一个类只能有一个实例,说白了,也就是类只能在内部实例一次,然后提供这一实例,外部无法对此类实例化. 单例模式的特点: 1.只能有一个实例: 2.只能自己创建自己的唯一实例: 3.必 ...
- Rhythmk 一步一步学 JAVA (14) Spring-3 @Autowired,@Qualifier @Required @Resource @Component,@Service,@Controller,@Repository @PostConstruct,@PreDestroy
1.@Autowired 注解:首先在使用时候需要引入配置: <!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 --> ...
- leetcode680
class Solution { public: bool validPalindrome(string s) { int len = s.length(); ) return true; , len ...
- Console2支援中文顯示的正式設定法
1.用regedit找到HKEY_CURRENT_USER\Console,把底下的Console2 command window機碼給砍了.2.Console2的View功能表中,有個Console ...
- 修改SecureCRT终端的Home和End功能键。
SecureCRT真是个不错的ssh客户端工具,但在使用时发现跟自己的一些使用习惯不符合,例如home.end.pageup.pagedown和delete等键. 默认情况下一些按键的功能如下: pa ...
- 1.Hadoop集群搭建之Linux主机环境准备
Hadoop集群搭建之Linux主机环境 创建虚拟机包含1个主节点master,2个从节点slave1,slave2 虚拟机网络连接模式为host-only(非虚拟机环境可跳过) 集群规划如下表: 主 ...
- ASP.NET Web API(C#)学习01
Web Api 记得去年公司有个分享会分享了这个,最近留意招聘信息的时候,发现有个招聘信息的要求是会用WebApi,然后花了半个小时不到,根据下面这篇文章了解了一下,觉得这个东西也不难啊. 突然发现在 ...
- HashMap、HashTable的区别
HashMap和HashTable都实现了Map接口,但是要用哪个要分清它们之间的区别. 它们的主要区别:线程安全性.速度 HashMap几乎可以等价于HashTable除了HashMap是非sync ...