验证器:

验证器:用户输入验证
 1.手动编程方式
)对于动作类中所有方法进行验证
a.动作类继承ActionSuport
b.覆盖调用public void validate(){} 方法
c.在validate方法中,编写不符合要求的代码判断,并调用父类的addFieldError(String fieldName,String errorMessage)
如果fieldError(存放错误信息的Map)有任何的元素,就是验证不通过,动作方法不会执行。
Struts2框架会返回到name=input的result
d.在name=input指定的页面上使用struts2的标签显示错误信息。<s:fielderror /> )对于动作类中指定方法进行验证
编写步骤与手动编程方式相同,验证方法书写要求如下:
public void validate[Add]() { } //检测add()方法

UserAction.java
 1 package cn.gs.ly;

 import com.opensymphony.xwork2.ActionSupport;

 public class UserAction extends ActionSupport {
private String username; //不能为空
private String password; //不能为空 ,切三到六位数字 public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} public String add(){
System.out.println("add方法执行成功");
return SUCCESS;
} public String update(){
System.out.println("update方法执行成功");
return SUCCESS;
} @Override
//对于动作类中所有方法进行验证
public void validate() { //只验证不符合条件的数据
if(username==null||"".equals(username.trim())){
addFieldError("username", "姓名不能为空");
}
if(password==null||!password.matches("\\d{3,6}")){
addFieldError("password", "密码不能为空,切为3-6位纯数字");
}
} // //对于动作类中指定方法进行验证 对add()方法进行验证
// public void validateAdd() { //只验证不符合条件的数据
// if(username==null||"".equals(username.trim())){
// addFieldError("username", "姓名不能为空");
// }
// if(password==null||!password.matches("\\d{3,6}")){
// addFieldError("password", "密码不能为空,切为3-6位纯数字");
// }
// } } struts.xml

<package name="validate" namespace="/validate" extends="struts-default">
  <action name="user_*" class="cn.gs.ly.UserAction" method="{1}">
    <result type="dispatcher" name="success">/success.jsp</result>
    <result type="dispatcher" name="error">/error.jsp</result>
    <result type="dispatcher" name="input">/{1}User.jsp</result> <!-- 转换数据类型失败,输入验证错误 -->
  </action>
</package>

 

 2、基于XML配置文件的方式:

    1、对于动作类中所有方法进行验证:  UserAction-validation.xml
在动作类中的包中建立一个名称为:动作类简单名-validation.xml 2、对于动作类中指定方法进行验证: UserAction-user_add-validation.xml
动作类简单名-action名-validation.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="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>

  具体配置方法示例:


UserAction.java
 1 package cn.gs.ly;

 import com.opensymphony.xwork2.ActionSupport;

 public class UserAction extends ActionSupport {
private String username; //不能为空
private String password; //不能为空 ,切三到六位数字 public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} public String add(){
System.out.println("add方法执行成功");
return SUCCESS;
} public String update(){
System.out.println("update方法执行成功");
return SUCCESS;
}
}

UserAction-validation.xml

在动作类中的包中建立一个名称为:动作类简单名-validation.xml

    对于动作类中所有方法进行验证: UserAction-validation.xml

    对于动作类中指定方法进行验证: UserAction-user_add-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="username">
<field-validator type="requiredstring" >
<message>姓名不能为空哦。。。</message>
</field-validator>
</field> <field name="password">
<field-validator type="requiredstring">
<message>密码不能为空哦。。。</message>
</field-validator>
<field-validator type="regex">
<param name="regex"><![CDATA[(\d{,})]]></param>
<message>密码为3-6位纯数字</message>
</field-validator>
</field> </validators>

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>
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.custom.i18n.resources" value="GS"></constant> <package name="mypackage" extends="struts-default">
<global-results><!-- 全局错误页 -->
<result name="error" type="dispatcher">/customer/error.jsp</result>
</global-results>
</package> <package name="validate" namespace="/validate" extends="struts-default">
<action name="user_*" class="cn.gs.ly.UserAction" method="{1}">
<result type="dispatcher" name="success">/success.jsp</result>
<result type="dispatcher" name="error">/error.jsp</result>
<result type="dispatcher" name="input">/{1}User.jsp</result> <!-- 转换数据类型失败,输入验证错误 -->
</action>
</package>
</struts>

 addUser.jsp

 <%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<s:fielderror fieldName="username"></s:fielderror>
<s:fielderror fieldName="password"></s:fielderror>
<form action="${pageContext.request.contextPath }/validate/user_add" method="post" >
姓名<input type="text" name="username"> <br>
密码<input type="text" name="password"> <br> <input type="submit" value="保存">
</form> </body>
</html>

 3、自定义验证器

自定义验证器
.编写一个类,继承FieldValidatorSupport类
.重写 public void validate(Object object) throws ValidationException {} 方法,编写逻辑
.注册验证器
在WEB-INF/classes目录下(src)建立一个validators.xml 配置文件。详情参照
/com/opensymphony/xwork2/validator/validators/default.xml

  

UserAction.java

 package cn.gs.ly.validators;

 import com.opensymphony.xwork2.ActionSupport;

 public class UserAction extends ActionSupport {

     private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} @Override
public String execute() throws Exception {
System.out.println("执行自定义验证器");
return SUCCESS;
} }

StrongPasswordValidator.java   编写逻辑

    1.编写一个类,继承FieldValidatorSupport类
2.重写 public void validate(Object object) throws ValidationException {} 方法,编写逻辑
 package cn.gs.ly.validators;

 import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
//1.编写一个类,继承FieldValidatorSupport类
public class StrongPasswordValidator extends FieldValidatorSupport { //2.重写 public void validate(Object object) throws ValidationException {} 方法,编写逻辑
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();
String filedValue = (String)getFieldValue(fieldName, object); System.out.print(fieldName+"=");System.out.println(filedValue); if(!isPasswordStrong(filedValue)){
addFieldError(fieldName, object);
}
} private static final String GROUP1 = "abcdefghijklmnopqrstuvwxyz";
private static final String GROUP2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String GROUP3 = ""; protected boolean isPasswordStrong(String password) {
System.out.println("进入isPasswordString 方法,password:"+password);
boolean ok1 = false;
boolean ok2 = false;
boolean ok3 = false;
int length = password.length(); for(int i=;i<length;i++){
if(ok1&&ok2&&ok3){
break;
} String character = password.substring(i,i+);
if(GROUP1.contains(character)){
ok1 = true;
continue;
}
if(GROUP2.contains(character)){
ok2 = true;
continue;
}
if(GROUP3.contains(character)){
ok3 = true;
continue;
}
}
return ok1&&ok2&&ok3;
}
}

validators.xml

3.注册验证器
在WEB-INF/classes目录下(src)建立一个validators.xml 配置文件。详情参照
/com/opensymphony/xwork2/validator/validators/default.xml 写法


1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE validators PUBLIC
3 "-//Apache Struts//XWork Validator Definition 1.0//EN"
4 "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
5
6 <validators>
7 <validator name="strongpassword" class="cn.gs.ly.validators.StrongPasswordValidator"/>
8 </validators>
  

UserAction-validation.xml  调用自定义的验证器

在动作类中的包中建立一个名称为:动作类简单名-validation.xml  使用验证器

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE validators PUBLIC
3 "-//Apache Struts//XWork Validator 1.0.3//EN"
4 "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
5
6 <validators>
7
8 <field name="password">
9 <field-validator type="strongpassword">
10 <message>密码过于简单。请使用数字,大小写字母混合密码</message>
11 </field-validator>
12 </field>
13
14 </validators>
15

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>
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.custom.i18n.resources" value="GS"></constant> <package name="mypackage" extends="struts-default">
<global-results><!-- 全局错误页 -->
<result name="error" type="dispatcher">/customer/error.jsp</result>
</global-results>
</package> <package name="strongpassword" namespace="/strongpassword" extends="struts-default">
<action name="isPasswordStrong" class="cn.gs.ly.validators.UserAction" >
<result type="dispatcher" name="success">/success.jsp</result>
<result type="dispatcher" name="error">/error.jsp</result>
<result type="dispatcher" name="input">/isPasswordStrong.jsp</result>
</action>
</package> </struts>

isPasswordStrong.jsp

 <%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<s:fielderror fieldName="password"></s:fielderror> <form action="${pageContext.request.contextPath }/strongpassword/isPasswordStrong" method="post" >
密码<input type="text" name="password"> <br>
<input type="submit" value="保存">
</form>
</body>
</html>

4、Struts2对于i18n的支持

    命名规则:
basename.properties
basename_language_country.properties
basename_language.properties
1.全局范围
在WEB-INF/classes目录下
2.包范围
      服务于Java类中的包下的动作类的。
      取名:package_语言_国家.properties
package_**_.properties
3.action范围
      放到与动作类相同的包中
      取名:动作类名_语言_国家.properties
actionclass_**_.properties
文件内容
1 GS_zh_CN.properties:
2 welcome={0} \u6B22\u8FCE\u6765\u5230\u8FD9\u91CC."i18n test" {1}
3
4 GS_en_US.properties:
5 welcome={0} welcome to here."i18n test" {1}

  4.1、jsp中读取国际化的消息:

 <%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<s:text name="welcome">
<s:param >刘超</s:param> <!-- 给welcome添加赋值于占位符处({*}) -->
<s:param >go home</s:param>
</s:text> <s:i18n name="cn/gs/ly/package"> <!-- 包范围 -->
<s:text name="welcome">
<s:param >刘超</s:param>
<s:param >go home</s:param>
</s:text>
</s:i18n>
</body>
</html>

  4.2、动作类中读取国际化的消息

 package cn.gs.ly;

 import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class I18nAction extends ActionSupport { @Override
public String execute() throws Exception {
//String value = getText("welcome"); //获取welcome 对应的值 //获取welcome 对应的值 ,并添加赋值于占位符({*})处
String value = getText("welcome",new String[]{"LY","good brother"}); ActionContext.getContext().put("message", value);
return SUCCESS;
}
}

 表格  隔行换色

 <%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<s:set var="list1" value="{'a','b','c'}"></s:set>
<table border="1" width="70%">
<tr>
<th>姓名</th>
<th>性别</th>
<th>婚否</th>
</tr>
<s:iterator value="#list1" status="vs">
<tr bgcolor="${vs.index%2==0?"green":"grey" }">
<td>空格</td>
<td>空格</td>
<td>空格</td>
</tr>
</s:iterator>
</table> </body>
</html>

struts2 基础4 验证器、 国际化的更多相关文章

  1. struts2基础——自定义拦截器

    一.自定义拦截器 默认的拦截器能实现的功能是有限的,Struts2 支持自定义拦截器. 二.拦截器类 1.实现 Interceptor 接口 2.继承 AbstractInterceptor 抽象类, ...

  2. struts2基础---->自定义拦截器

    这一章,我们开始struts2中拦截器的学习. 自定义拦截器

  3. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

  4. 自己定义验证器——用Struts2框架以框架师的思维灵活做好该事情

    面对的问题:自己定义一个18位身份验证器.编写验证器.在validators.xml文件里进行注冊.在验证配置文件里使用? 第一部分:理解Struts2中自带的验证器 第二部分:如何通过server( ...

  5. struts2验证器

    1. Struts2 的验证(note6,struts2-8) 1). 验证分为两种: > 声明式验证* >> 对哪个 Action 或 Model 的那个字段进行验证 >&g ...

  6. 基于struts2框架-自定义身份证号验证器

    自定义拦截器的步骤: 1.定义一个验证器的类: > 自定义的验证器都需要实现 Validator接口.  > 可以选择继承 ValidatorSupport 或 FieldValidato ...

  7. Struts2入门1 Struts2基础知识

    Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

  8. Struts2(十四)拦截器实现权限管理

    一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...

  9. Struts2笔记——Action校验器

    在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验.  对于输入校验struts2提供了两种实现方法: 1.采用手工编写代码实现. 2.基于XML配置 ...

随机推荐

  1. styled-components缺点

    缺点 不能用 stylelint 检查你的 Css 代码 在使用 styled-components 的过程中也会遇到一些问题,比如我们的项目会用stylelint来做样式代码的检查,但是使用了 st ...

  2. 内存缓存的使用Demo

    使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求. 内存缓存我们可以使用sdk中的NSURLC ...

  3. python 模块发布及使用

    将模块(此处名为nester)写好后,与setup.py放入同一个文件夹中: //setup.py from distutils.core import setup setup( name=" ...

  4. win10系统中photoshop cs6中界面字体太小的解决方法

    win10系统中photoshop cs6中界面字体太小的解决方法 ps页面系统字体特别小,解决方法如下: 右键ps图标—属性—兼容性—勾选替代高dpi缩放行为,缩放执行选为默认,如果不行三个都试试

  5. Spring基础09——Bean的自动装配

    1.XML配置的Bean自动装配 SpringIOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,而不需要手工去指定要装配的Bean,a ...

  6. 009-流程控制 for 语句

    流程控制 for 语句 ##################### 语法一 ################################# #!/bin/bash do echo $i done ...

  7. 北京师范大学第十五届ACM决赛-重现赛E Euclidean Geometry (几何)

    链接:https://ac.nowcoder.com/acm/contest/3/E 来源:牛客网 Euclidean Geometry 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ ...

  8. Granger Causality 格兰杰因果关系

      (Granger Causality) 格兰杰(Granger)于 1969 年提出了一种基于“预测”的因果关系(格兰杰因果关系),后经西蒙斯(1972 ,1980)的发展,格兰杰因果检验作为一种 ...

  9. pull request的使用

    在git中,不少开发者对自己的提升非常看重,github中的开源项目就是一个非常好的学习资料. github中的开源项目并不是完全正确的,而成为项目贡献者是一件值得骄傲的事情. 所以如何才能对开源项目 ...

  10. DDD领域驱动设计初探(四):WCF搭建

    前言:前面三篇分享了下DDD里面的两个主要特性:聚合和仓储.领域层的搭建基本完成,当然还涉及到领域事件和领域服务的部分,后面再项目搭建的过程中慢慢引入,博主的思路是先将整个架构走通,然后一步一步来添加 ...