* 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法
    
    * 要继承ActionSupport类或者实现Validateable接口
    
    * 重写Validateable接口的validate()方法
        * 前提是:要保证setUsername()、validate()、login()方法要按照这个先后顺序执行
    
    * 如果登录失败,如何处理:
        * this.addFieldError( key, value);
            * key:错误提示字段
            * value:错误提示信息
    
    * 什么时候才是验证通过?
        * 验证通过:1、map集合不存在;2、map集合存在并为空
        * 验证不通过:map集合存在并且不为空
    
    * 分析需求:
        * 用户名不能为null ,""
        * 密码不能为null, "" ,并且密码的长度6-12之间
    
    * 针对所有业务方法进行验证还是针对某个指定业务方法进行验证?
        * 重写的validate()方法,针对所有业务方法进行验证
        * 重写的validate()方法加上要验证的指定的业务方法名(业务方法名的首字母大写),实现针对某个指定的业务方法进行验证
            * 为什么要这样进行拼接?因为struts2框架底层拼接,如果不这样写,底层就找不到对应方法名

 index.jsp
<s:fielderror></s:fielderror>
<s:form name="loginForm" namespace="/validate" action="ValidateAction_login.action" method="post">
用户名:<s:textfield name="username"/><br/>
密码:<s:password name="pwd"/><br/>
<s:submit value="登录"/>
</s:form>
<a href="${pageContext.request.contextPath}/validate/ValidateAction_test.action">test</a>
 @SuppressWarnings("serial")
public class ValidateAction extends ActionSupport {
private String username;
private String pwd;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
//只验证Login 业务,不验证test,如果全部验证,把方法名携写作validate()
public void validateLogin() {
if(username==null || username.equals(""))
{
this.addFieldError("error", "用户名不能为空");//key:错误标示;value:错误提示
}
if(pwd==null || pwd.equals(""))
{
this.addFieldError("error", "密码不能为空");
}else {
String pattern="^[0-9a-zA-Z]{6,12}$";
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher(pwd);
boolean b=m.matches();
if(!b){
this.addFieldError("error", "密码格式错误");
}
}
} public String login(){
System.err.println("1234567890-");
return "success";
}
public String test(){
System.err.println("987654321");
return "success";
}
}

Struts2 手动验证的更多相关文章

  1. 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】

    一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...

  2. struts2输入验证

    1.方法     ① 基于Annotations的验证       ②基于XML配置的验证 http://blog.csdn.net/furongkang/article/details/692204 ...

  3. Struts2数据验证机制

    1. 手动验证的实现 只需要在继承ActionSupport类的情况下,直接重写validate()方法即可.使用validate()方法可以对用户请求的多个Action方法进行验证,但其验证的逻辑是 ...

  4. struts2 的验证框架validation如何返回json数据 以方便ajax交互

    struts2 的验证框架validation简单,好用,但是input只能输出到jsp页面通过struts2的标签<s:fielderror  />才能取出,(EL应该也可以). 如果使 ...

  5. Struts2 框架验证

    struts2框架验证(xml方式):    * 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法        * 创建一个xml格式验证文 ...

  6. AngularJS实现表单手动验证和表单自动验证

    AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证.一.手动验证 所谓手动验证是通过AngularJS表单的属性来验证.而成为AngularJS表单必须满足两个条件: 1.给for ...

  7. Struts学习之手动验证

    * 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法    * 要继承ActionSupport类或者实现Validateable接口     ...

  8. AngularJS表单验证,手动验证或自动验证

    AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证. 手动验证 所谓手动验证是通过AngularJS表单的属性来验证.而成为AngularJS表单必须满足两个条件:1.给form元 ...

  9. Struts2数据验证与使用Java代码进行数据验证

    Struts2数据验证 使用Java代码进行数据验证 重写ActionSupport的validate()方法 对Action类的中所有请求处理方法都会进行验证! 对Action类的数据属性进行检查, ...

随机推荐

  1. 使用JQUERY实现局部页面定时刷新

    没办法,运维会一点点前端,还是有好处的.. 说不定,BOOTSTRAP也得会一点点.. 本想用流式输出的搞定的,但没搞定,就取巧了... 代理简单: <script src="//cd ...

  2. [转载]mininet的安装和使用

    http://blog.csdn.net/neterpaole/article/details/8512106 最近在搞controller+mininet的openflow环境模拟,搞得不是很顺利, ...

  3. 一步一步学习SignalR进行实时通信_7_非代理

    原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...

  4. -_-#【Angular】自定义指令directive

    AngularJS学习笔记 <!DOCTYPE html> <html ng-app="Demo"> <head> <meta chars ...

  5. Shell遍历文件,对每行进行正则匹配

    Shell查看文件的最后5行,并对每行进行正则匹配,代码如下: #!/bin/sh pattern="HeartBeat" /home/test/log/log_20150205. ...

  6. CSAPP:Binary Bomb

    本篇文章参考了:http://www.cnblogs.com/remlostime/archive/2011/05/21/2052708.html大神的文章,有时候没思路了会来看一下,但是保证本文的每 ...

  7. 尚学堂 JAVA DAY11 概念总结

    1.冒泡排序算法 <升序排列> 思路1: 数组长度为n,那么要对数组进行n-1次遍历; step 1---从数组的第一个数开始,两两比较,如果第一个数 > 第二个数,将二者进行交换: ...

  8. [置顶] 【Git入门之八】分支管理

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12309385 1.分支又是神马? 我为什么说又是... 分支就是一个我们能通 ...

  9. Java容器详解

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.在Java中,容器的类型主要有:List.Set ...

  10. clang和gcc消除警告

    1. clang命令,它的作用是用来消除特定区域的clang的编译警告,-Wgnu则是消除?:警告, 例: #pragma clang diagnostic push #pragma clang di ...