第一种方式: 重写validation方法,

====验证action中所有的方法:

1. 在UserAction1里重写validation:

 @Override
public void validate() {
// TODO Auto-generated method stub
if(user.getUsername().trim().equals("")||user.getUsername()==null){
this.addFieldError("username_error", "用户名不能为空");
}
if(user.getPassword().length()<4||user.getPassword().length()>6){
this.addFieldError("password_error","密码必须为4~6位");
}
String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
Pattern regex = Pattern.compile(check);
Matcher matcher = regex.matcher(user.getEmail());
if(!matcher.matches()){
this.addFieldError("email_error", "电子邮箱格式不正确");
}
super.validate();
}

  

2. struts文件的设置,需要增加input的result name,写在当前action name下

<result name="input">/login.jsp</result>

  

3. jsp文件里的显示:

//前面加上标签使用库
<%@taglib uri="/struts-tags" prefix="s" %> <s:fielderror cssStyle="color:red"/> //显示错误信息
<form name="loginForm" action="<%=path%>/login.action" method="post">
<br><input type="button" value="登录1" onclick="javascript:document.loginForm.action='<%=path%>/user/login1.action';document.loginForm.submit();"/>
<br><input type="button" value="登录2" onclick="javascript:document.loginForm.action='<%=path%>/user/login2.action';document.loginForm.submit();"/>

<br><input type="button" value="登录3" onclick="javascript:document.loginForm.action='<%=path%>/user/login3.action';document.loginForm.submit();"/>

<br><input type="button" value="登录4" onclick="javascript:document.loginForm.action='<%=path%>/user/login4.action';document.loginForm.submit();"/>
<br>

====部分方法验证:

1. 在UsersAction3.java里加入:

 public void validateAdd(){
if(user.getEmail()==null||user.getEmail().trim().equals("")){
this.addFieldError("email_error","电子邮箱不能为空");
}
}

2.  需要给方法处理所在的action 配置result name:

 <result name="input">/login_success.jsp</result>

3. 在login_success.jsp里显示错误信息:

<s:fielderror cssStyle="color:red"/>

输入用户名和密码, 邮箱为空,验证

====validation方法重写+XML结合验证:

1. 在UsersAction3.java里全部验证

 public void validate(){
if(user.getEmail()==null||user.getEmail().trim().equals("")){
this.addFieldError("email_error","电子邮箱格式不正确");
}
}

  

2. xml配置:

 <interceptor-ref name="defaultStack">
<param name="validation.includeMethods">add,delete</param>
</interceptor-ref>

由于是全部验证, 所以应该是所有add,delete,modify都会验证,但是由于添加了xml的配置, 所以只有add,delete进行验证, modify被过滤掉了,不会进行验证.  

  

第二种方式:XML文档方式: UsersAction.java同包里加入一个文件UsersAction2-validation.xml:

<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message>
用户名不能为空
</message>
</field-validator>
</field> <field name="password">
<field-validator type="requiredstring">
<message>
密码不能为空
</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">6</param>
<message>密码必须是4~6位</message>
</field-validator>
</field> <field name="email">
<field-validator type="requiredstring">
<message>
邮箱名不能为空
</message>
</field-validator>
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>
</validators>

 

第三种方式:Annotation注解方式:

在UsersAction3.java里全部验证后, 对单独的方法前面加上:

@SkipValidation

@SkipValidation
public String delete(){
System.out.println("删除");
return SUCCESS;
}

如果从上面延续下来的话,那么add验证, delete不会验证.

@SkipValidation的意思理解就是: 抢到return result的权利用户名不能为空密码不能为空46 密码为4~6位 电子邮箱不能为空 电子邮箱格式不正确 自动还显示当前login.jsp界面: jsp文件里的显示: 第3种方式: :Annotation: action里全部验证格式: public void validate(){ if(user.getEmail()==null||user.getEmail().trim().equals("")){ this.addFieldError("email","电子邮箱不能为空"); } } 但是在add, delete,modify,execute等方法前面写上@SkipValidation 就可以跳过验证 @SkipValidation的意思理解就是: 抢到return result的权利

Struts2 语法--验证方式:的更多相关文章

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

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

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

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

  3. Struts2 框架验证

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

  4. Struts2数据验证机制

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

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

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

  6. struts2使用验证文件实现校验

    原创 struts2框架提供了一种基于验证文件的输入验证方式,将验证规则保存在特定的验证文件中. 验证文件的命名规则 一般情况下,验证文件的命名规则是:Action类名-validation.xml. ...

  7. struts2的验证

    1.原理 当浏览器向服务器提交表单数据时,在服务器端需要对表单数据的有效性进行校验. “校验方法”会在“业务方法”之前调用. 2.实现验证的两种方式 struts2校验的两种实现方法: 1. 手工编写 ...

  8. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

  9. SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法

    SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法 今天看到这篇文章:没有了SA密码,无法Windows集成身份登录,DBA怎么办? 想起来之前着急哥问我的一个问 ...

随机推荐

  1. 笨方法学python--提示别人

    1 上次学到使用raw_input(), 还可以如下使用: age = raw_input("age?") 2 命令名查看raw_input的说明 unit, pydoc raw_ ...

  2. java代理的深入浅出(一)-Proxy

    java代理的深入浅出(一)-Proxy 1.什么是代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事 ...

  3. 模仿QQ客户端和服务器(支持window和linux)

    界面部分我还没有想好,到底是用MFC还是duilib呢? 好吧我先发一个demo版本,功能都有,以下为功能展示. 先说服务器(这个有俩个版本,支持win和linux):用的数据库为MYsql(因为是便 ...

  4. spark java 代码example

    https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples

  5. hdu_5683_zxa and xor(非正解的暴力)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5683 题意: 问题描述 zxa最近对按位异或(exclusive disjunction)产生了极大的 ...

  6. echo json数据给ajax后, 需要加上exit,防止往下执行,带上其他数据,到时ajax失败

    01返回json数据给ajax后需要加上exit.返回json数据前不能有其他输出 function apply(){ if(IS_POST){$info['status'] = 1; echo js ...

  7. openwrt 包makefile

    $() 表示要执行的一条语句 $(if 条件, 成立执行, 失败执行)        if条件分支 $(foreach 变量, 成员列表, 执行体)   成员遍历语句 可以看出,语句是可以嵌套使用的. ...

  8. knockout.js

    最近在使用knockout这个JS的MVVM模型,真的很不错,每次去查英文的文档,的确很累的,抽空的时候就把看到的文档按自己的理解翻译一下.当然我不是逐字的翻译. knockout的官方说明:http ...

  9. MPEG1的码流层次与各层次的作用

    1. 序列层(Sequence layer) 序列层主要用于为随机播放提供全局参数支持,这些参数包括图像宽高.像素高宽比.帧率.码率.VBV大小.帧内量化矩阵.帧间量化矩阵. 2. 图像组层(Grou ...

  10. mvc动态生成a标签,多个属性,多个querystring

    1*服务端 客户端 跳转的url 2*服务端 客户端 跳转的url 3*服务端 客户端  跳转的url  4*服务端 客户端 跳转的url