struts2表单数据验证
2017-06-28 17:27
453 查看
struts2的表单数据需要进行验证,验证有两种,一种是手动在action的方法中验证,另一种是使用框架的xml配置文件验证。
表单页面register.jsp代码:
RegisterAction.java代码:
struts.xml配置文件代码
打开浏览器输入url:http://localhost:8080/validate/register.jsp
输入数据:name=ad ,age=-11
点击登陆按钮,如图:
上面显示的提示信息就是在Action类中手动写的表单数据验证。
register.jsp页面代码:
RegisteValidateAction.java代码:
使用struts2框架的验证规则是:每一个action对应一个验证xml文件,xml文件格式是:ActionName-validation.xml
此项目中的xml配置文件是:RegisterValidateAction-validation.xml,代码:
这里只写了一个表单用户名name的验证,
struts.xml的代码是:
浏览器中输入URL:http://localhost:8080/validate/register.jsp
点击登陆按钮,验证未通过,仍然返回register.jsp页面,展示验证结果:
从struts2官网上下载struts的压缩包,我下载的是struts-2.3.32-all.zip,解压后,得到
struts-2.3.32-all ,然后依次点击进入:struts-2.3.32-->docs-->docs,找到index.html文件,
在浏览器中打开,如图:
进入Guides,
进入Validation页面后,一直往下来,可以看到Registering Validators,如图:
这部分介绍了,struts2框架自带的验证的类型,对应的class是实现这个类型的源码,我们就拿我们项目demo中使
用的requiredstring验证为例,来看看源码,
点击上图的xwork-core-2.3.32.jar包,进入,在com.opensymphony.xwork2.validator.validators包下找到
RequiredStringValidator.class文件,如图:
RequiredStringValidator.class源码如下:
其中有一点注释掉的内容,就是举例子告诉我们怎么写配置文件,
翻译成xml文件格式就是:
继续看源码中,只有一个属性,trim,如图:
继续读取文档,可以看到文档中举了一些例子,告诉我们常见的该怎么配置,如图:
文档中没有的例子,可以按照按照上面的方法,从源码中寻找,每一个源码中都有例子。一共有16个类型
一、手动action中验证
程序架构图:表单页面register.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>My JSP 'register.jsp' starting page</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> <s:actionerror/><!-- 展示Action中验证表单数据的错误提示信息 --> <form action="register.action" method="post"> 用户名:<input type="text" name="name" /><br/> 密码:<input type="password" name="pwd" /><br/> 年龄:<input type="text" name="age" /><br/> 生日:<input type="text" name="birthday" /><br/> <input type="submit" value="登陆" /> </form> </body> </html>
RegisterAction.java代码:
package com.robert.validate.action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class RegisterAction extends ActionSupport { private String name; private String pwd; private int age; private Date birthday; public String register() { System.out.println("register..."); return SUCCESS; } /** * 这里的validateRegister()方法中的register是上面的register()方法, * 也就是struts.xml配置文件中的action中的method对应的register方法, * 当程序执行method为register的方法时,就会先执行validateRegister()验证方法, * 然后执行validate()方法,最后执行register()方法. */ public void validateRegister() { System.out.println("validateRegister...age=" + age); if (age > 100 || age < 1) { this.addActionError("年龄不合法"); } } /** * 程序先执行validate()方法,然后在执行register()方法 */ @Override public void validate() { System.out.println("validate...name=" + name); if (name != null && (name.length() < 5 || name.length() > 10)) { this.addActionError("姓名不为空,且长度必须大于5,小于10"); } } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
struts.xml配置文件代码
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <action name="register" class="com.robert.validate.action.RegisterAction" method="register"> <result>/index.jsp</result> <!-- 当验证不成功时,struts2框架会找result中的input属性对应的jsp页面 --> <result name="input">/register.jsp</result> </action> </package> </struts>
打开浏览器输入url:http://localhost:8080/validate/register.jsp
输入数据:name=ad ,age=-11
点击登陆按钮,如图:
上面显示的提示信息就是在Action类中手动写的表单数据验证。
二、框架xml文件验证
项目架构截图:register.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>My JSP 'register.jsp' starting page</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> <s:fielderror /><!-- 使用struts2框架的xml配置文件验证使用 --> <form action="register.action" method="post"> 用户名:<input type="text" name="name" /><br/> 密码:<input type="password" name="pwd" /><br/> 年龄:<input type="text" name="age" /><br/> 生日:<input type="text" name="birthday" /><br/> <input type="submit" value="登陆" /> </form> </body> </html>
RegisteValidateAction.java代码:
package com.robert.validate.action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class RegisterValidateAction extends ActionSupport { private String name; private String pwd; private int age; private Date birthday; public String register() { System.out.println("register..."); return SUCCESS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
使用struts2框架的验证规则是:每一个action对应一个验证xml文件,xml文件格式是:ActionName-validation.xml
此项目中的xml配置文件是:RegisterValidateAction-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="name"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>name is required(用户名必填)</message> </field-validator> </field> </validators>
这里只写了一个表单用户名name的验证,
struts.xml的代码是:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <action name="register" class="com.robert.validate.action.RegisterValidateAction" method="register"> <result>/index.jsp</result> <!-- 当验证不成功时,struts2框架会找result中的input属性对应的jsp页面 --> <result name="input">/register.jsp</result> </action> </package> </struts>
浏览器中输入URL:http://localhost:8080/validate/register.jsp
点击登陆按钮,验证未通过,仍然返回register.jsp页面,展示验证结果:
下面介绍一下怎么样配置ActionName-validation.xml文件
根据struts2自带的docs文档,
根据docs文档:
从struts2官网上下载struts的压缩包,我下载的是struts-2.3.32-all.zip,解压后,得到struts-2.3.32-all ,然后依次点击进入:struts-2.3.32-->docs-->docs,找到index.html文件,
在浏览器中打开,如图:
进入Guides,
进入Validation页面后,一直往下来,可以看到Registering Validators,如图:
这部分介绍了,struts2框架自带的验证的类型,对应的class是实现这个类型的源码,我们就拿我们项目demo中使
用的requiredstring验证为例,来看看源码,
点击上图的xwork-core-2.3.32.jar包,进入,在com.opensymphony.xwork2.validator.validators包下找到
RequiredStringValidator.class文件,如图:
RequiredStringValidator.class源码如下:
/* * Copyright 2002-2006,2009 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.opensymphony.xwork2.validator.validators; import com.opensymphony.xwork2.validator.ValidationException; /** * <!-- START SNIPPET: javadoc --> * RequiredStringValidator checks that a String field is non-null and has a length > 0. * (i.e. it isn't ""). The "trim" parameter determines whether it will {@link String#trim() trim} * the String before performing the length check. If unspecified, the String will be trimmed. * <!-- END SNIPPET: javadoc --> * <p/> * * <!-- START SNIPPET: parameters --> * <ul> * <li>fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required</li> * <li>trim - (Optional) Boolean, default true. Trims the field name value before validating.</li> * <li>trimExpression - (Optional) String. Specifies the trim param as an OGNL expression.</li> * </ul> * <!-- END SNIPPET: parameters --> * * <!-- START SNIPPET: parameters-warning --> * Do not use ${trimExpression} as an expression as this will turn into infinitive loop! * <!-- END SNIPPET: parameters-warning --> * * <pre> * <!-- START SNIPPET: examples --> * <validators> * <!-- Plain-Validator Syntax --> * <validator type="requiredstring"> * <param name="fieldName">username</param> * <param name="trim">true</param> * <message>username is required</message> * </validator> * * <!-- Field-Validator Syntax --> * <field name="username"> * <field-validator type="requiredstring"> * <param name="trim">true</param> * <message>username is required</message> * </field-validator> * </field> * * <!-- Field-Validator Syntax with expression --> * <field name="username"> * <field-validator type="requiredstring"> * <param name="trimExpression">${trimValue}</param> <!-- will be evaluated as: boolean getTrimValue() --> * <message>username is required</message> * </field-validator> * </field> * </validators> * <!-- END SNIPPET: examples --> * </pre> * * @author rainerh * @version $Date$ $Id$ */ public class RequiredStringValidator extends FieldValidatorSupport { private boolean trim = true; public void setTrim(boolean trim) { this.trim = trim; } public void setTrimExpression(String trimExpression) { trim = (Boolean) parse(trimExpression, Boolean.class); } public boolean isTrim() { return trim; } public void validate(Object object) throws ValidationException { String fieldName = getFieldName(); Object value = this.getFieldValue(fieldName, object); if (!(value instanceof String)) { addFieldError(fieldName, object); } else { String s = (String) value; if (trim) { s = s.trim(); } if (s.length() == 0) { addFieldError(fieldName, object); } } } }
其中有一点注释掉的内容,就是举例子告诉我们怎么写配置文件,
翻译成xml文件格式就是:
<validators> <field name="name"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>name is required(用户名必填)</message> </field-validator> </field> </validators>
继续看源码中,只有一个属性,trim,如图:
继续读取文档,可以看到文档中举了一些例子,告诉我们常见的该怎么配置,如图:
文档中没有的例子,可以按照按照上面的方法,从源码中寻找,每一个源码中都有例子。一共有16个类型
相关文章推荐
- Struts2表单验证、模型驱动、防重复提交、数据回显笔记整理 文章标题
- Struts2的表单数据验证
- 运用Struts2数据验证实现注册表单验证
- struts2表单错误处理和数据验证
- Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程
- Struts2-利用数据验证框架进行表单验证
- Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程
- Struts2表单验证、模型驱动、防重复提交、数据回显笔记整理
- Struts2对表单提交数据的验证
- Struts2_表单数据验证(基于手工)
- Struts2(二)---将页面表单中的数据提交给Action
- struts2简单数据验证
- jqGrid与Struts2的结合应用(三) —— 使用自定义表单对话框编辑Grid数据
- struts2 中 JAVA 代码 获取表单中的数据
- Struts2学习笔记2 ――表单验证
- 数据验证【web前端,表单】
- 关于form表单中动态添加数据的验证
- struts2使用validate方法来实现对表单输入数据的校验操作
- Struts2教程4:使用validate方法验证数据
- Js 最原始的表单验证 |将数据提交到百度搜索