struts系列:校验(一)XML校验和函数方法校验
一、jsp示例
<form action="login" method="post">
<div class="form-group has-feedback">
<s:fielderror></s:fielderror> //重点,放一块报错信息的空间
</div>
<div class="form-group has-feedback">
<input name="name" type="text" class="form-control" placeholder="Email" value="">
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input name="password" type="password" class="form-control" placeholder="Password" value="">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="row">
<div class="col-xs-8">
<div class="checkbox icheck">
<label>
<input type="checkbox"> Remember Me
</label>
</div>
</div>
<!-- /.col -->
<div class="col-xs-4">
<button type="submit" class="btn btn-primary btn-block btn-flat"><s:text name="loginSubmit"/></button>
</div>
<!-- /.col -->
</div>
</form>
二、action示例
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport {
private static final transient Logger logger = LogManager.getLogger(LoginAction.class);
private String name;
private String password; public String execute() {
logger.debug("name={},password={}", name, password);
HttpServletRequest request = ServletActionContext.getRequest();
logger.debug("get locale = {}", request.getLocale());
if ("lings".equals(name)) {
return SUCCESS;
} else {
return INPUT;
} } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
三、struts.xml示例
<action name="login" method="execute" class="com.sanro.strutsDemo.action.LoginAction">
<result name="success" type="tiles">tiger</result> //成功的跳转
<result name="input">/index.jsp</result> //校验失败的跳转
</action>
四、校验方式
1. XML校验
可以针对每个action建立一个校验文件,例如以示例action为例,需要建立一个LoginAction-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">
<!-- DTD文件信息见struts2-core-2.x.x.jar中的具体情况 -->
<validators>
<!--验证的每一个字段用filed表示 -->
<!--验证用户名 -->
<field name="name">
<!--指定使用的验证器,此处选择非空验证 -->
<field-validator type="requiredstring">
<!--验证失败的错误提示信息 -->
<message>用户名不能为空</message>
</field-validator>
</field> <!--验证pwd -->
<field name="password">
<!--密码非空 -->
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator> <!--密码长度验证 -->
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">8</param>
<message>密码必须为6-8位!</message>
</field-validator>
</field>
</validators>
2. 在继承ActionSupport的action类中覆写validate()方法
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport {
.....
@Override
public void validate() {
logger.debug("firstly, validate!!!");
// super.validate();
if (!password.equals("123456")) {
this.addFieldError("password", "对不起,password is error!");
} }
......
附录一、更多的内置校验器
struts2-core-2.x.x.jar\com\opensymphony\xwork2\validator\validators\default.xml
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" />
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" />
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" />
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator" />
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator" />
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" />
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" />
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator" />
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" />
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator" />
<validator name="creditcard" class="com.opensymphony.xwork2.validator.validators.CreditCardValidator" />
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator" />
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" />
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" />
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" />
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" />
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator" />
</validators>
附录二、自定义校验器
XML自带的校验器有时不能满足我们的校验需求,可以考虑自建一个校验器。
struts系列:校验(一)XML校验和函数方法校验的更多相关文章
- 深入理解javascript函数系列第三篇——属性和方法
× 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...
- 微软BI 之SSIS 系列 - 两种将 SQL Server 数据库数据输出成 XML 文件的方法
开篇介绍 在 SSIS 中并没有直接提供从数据源到 XML 的转换输出,Destination 的输出对象有 Excel File, Flat File, Database 等,但是并没有直接提供 X ...
- Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究
Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: 反射的概念是由Smith在1982年首次提出的 ...
- Struts2输入校验(XML方式)
本章主要介绍struts2的XML配置方式输入校验.以下将结合一个实例程序进行说明. 代码结构: 关键代码: RegistAction.javapackage com.alfred.regist.ac ...
- struts2官方 中文教程 系列十三:利用通配符选择方法
介绍 在本教程中,我们将介绍如何在struts.xml中配置action节点以达到仅使用一个action节点将几个不同的url关联到特定action类的特定方法.这样做的目的是减少struts.xml ...
- 你真的会玩SQL吗?实用函数方法汇总
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- Atitit 发帖机系列(7) 词法分析的方法attilax大总结)
Atitit 发帖机系列(7) 词法分析的方法attilax大总结) 1.1. 词法分析貌似俩大方法,一个直接根据状态图转换,一个根据dfa1 1.2. switchcase或者ifelse 最原始方 ...
- 【函数】Oracle函数系列(2)--数学函数及日期函数
[函数]Oracle函数系列(2)--数学函数及日期函数 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...
- 八、Android学习第七天——XML文件解析方法(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...
随机推荐
- 【树莓派】树莓派新版系统SSH连接被拒绝问题处理
安装好新的版本树莓派(NOOBS_v2_4_0.zip)之后,直连显示器并接上网线,可以看到已经获取到动态IP地址了. 但是,此时使用xshell远程连接时,却一直连接不成功: [d:\~]$ Con ...
- Centos7中安装Docker
1.配置docker镜像安装源 tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository ...
- Python学习笔记_03:简单操作MongoDB数据库
目录 1. 插入文档 2. 查询文档 3. 更新文档 4. 删除文档 1. 插入文档 # -*- coding: UTF-8 -*- import datetime from pymongo im ...
- Java并发容器——ConcurrentSkipListMap和ConcurrentHashMap
一:ConcurrentSkipListMap TreeMap使用红黑树按照key的顺序(自然顺序.自定义顺序)来使得键值对有序存储,但是只能在单线程下安全使用:多线程下想要使键值对按照key的顺序来 ...
- JS:指定FPS帧频,requestAnimationFrame播放动画
Flash制作动画,最基础的概念就是帧,但在Flash中,帧频的控制比较简单,只需要编译前指定一下目标帧频就可以了. 实际运行时,不需要我们关心定时器的问题,flash player会定时触发Ente ...
- 【转】Flash:同志们,这些知识点你们知道多少?(一些必备的Flash开发知识点)
1.理解flash的显示列表 2.理解事件冒泡,理解鼠标事件等 3.理解flash的性能瓶颈和大多数影响性能的地方4.理解帧跑道模型,知道timer和ent ...
- Xamarin.Android服务的实现
一.服务的生命周期 服务与活动一样,在它的整个生命周期中存在着一些事件,下图可以很好解释整个过程以及涉及到的方法: 在真实的使用中,Service来还包含一个OnBind方法,并且必须要使用该方法,但 ...
- 机器人运动规划中的构形空间(Configuration Space)
A key concept in motion planning is configuration space, or C-space for short. Every point in the C- ...
- 如何快速的得到string的最后一个字符
str='python' print str[-1]
- python之docstrinigs
# -*- coding: cp936 -*- #python 27 #xiaodeng #docstrinigs #文档字符串惯例 ''' 1.多行字符串 2.首行以大写字母开始,以句号结束 3.第 ...