`

struts2_03表单校验ognl国际化

阅读更多

一、用户输入验证
 1、编程方式:
  动作类中的所有方法进行验证:
  
   步骤:
   a、动作类继承ActionSupport
   b、覆盖调用public void validate()方法
   c、在validate方法中,编写不符合要求的代码判断,并调用父类的addFieldError(String fieldName,String errorMessage)
    如果fieldError(存放错误信息的Map)有任何的元素,就是验证不通过,动作方法不会执行。
    Struts2框架会返回到name=input的result
   d、在name=input指定的页面上使用struts2的标签显示错误信息。<s:fielderror/> 或 ${errors.名字}
  
  动作类中指定的方法进行验证:
   编写步骤与上面相同
   
   验证方法书写有要求:
    public void validateXxx()   Xxx代表的是要验证的动作方法名,其中要把动作方法名的首字母变为大写。
    
 
 2、基于XML配置文件的方式:
  动作类中的所有方法进行验证:
   在动作类的包中,建立一个名称为:动作简单类名-validation.xml ,比如要验证的动作类名是UserAction   UserAction-validation.xml
   内容如下:
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE validators PUBLIC
     "-//OpenSymphony Group//XWork Validator 1.0.3//EN"
     "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"><!--dtd在xwork包下-->
   <validators>
    <field name="username"><!--jsp中可以通过${errors.username}或<s:fielderror></s:fielderror>输出错误信息-->
     <!-- 内置验证器都是定义好的,在xwork-core.jar com.opensymphony.xwork2.validator.validators包中的default.xml文件中 -->
     <field-validator type="requiredstring"><!-- 不能为null或者""字符串,默认会去掉前后的空格 -->
      <message>用户名不能为空</message>
     </field-validator>
    </field>
   </validators>
  动作类中指定的方法进行验证:
   配置文件的名称书写有一定要求。
     动作类名-动作名(配置文件中的动作名)-validation.xml
     UserAction-user_add-validation.xml
struts2提供的校验器列表

系统提供的校验器如下:
required (必填校验器,要求field的值不能为null)
requiredstring (必填字符串校验器,要求field的值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
stringlength(字符串长度校验器,要求field的值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
regex(正则表达式校验器,检查被校验的field是否匹配一个正则表达式.expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
fieldexpression(字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
email(邮件地址校验器,要求如果field的值非空,则必须是合法的邮件地址)
url(网址校验器,要求如果field的值非空,则必须是合法的url地址)
date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)
conversion(转换校验器,指定在类型转换失败时,提示的错误信息)
visitor(用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性)
expression(OGNL表达式校验器,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中)


2. 校验器的使用例子

required  必填校验器
<field-validator type="required">
       <message>性别不能为空!</message>
</field-validator>

requiredstring  必填字符串校验器
<field-validator type="requiredstring">
       <param name="trim">true</param>
       <message>用户名不能为空!</message>
</field-validator>

stringlength:字符串长度校验器
<field-validator type="stringlength">
 <param name="maxLength">10</param>
 <param name="minLength">2</param>
 <param name="trim">true</param>
 <message><![CDATA[产品名称应在2-10个字符之间]]></message>
</field-validator>

email:邮件地址校验器
<field-validator type="requiredstring">
    <param name="trim">true</param>
    <message>邮箱不能为空</message>
</field-validator>
<field-validator type="email">
    <message>邮件格式不正确</message>
</field-validator>

regex:正则表达式校验器
<field-validator type="regex">
     <param name="expression"><![CDATA[^1[358]\d{9}$]]></param>
     <message>手机号格式不正确!</message>
</field-validator>

int:整数校验器
<field-validator type="int">
 <param name="min">1</param>
 <param name="max">150</param>
 <message>年龄必须在1-150之间</message>
</field-validator>

字段OGNL表达式校验器
<field name="imagefile">
 <field-validator type="fieldexpression">
  <param name="expression"><![CDATA[imagefile.length() <= 0]]></param>
  <message>文件不能为空</message>
 </field-validator>
</field>

3、自定义基于XML的验证器
  a、编写一个类,继承FieldValidatorSupport类。
  b、在public void validate(Object object)编写你的验证逻辑
    不符合要求的就向fieldErrors中放消息
  c、一定注册你的验证器才能使用
    在WEB-INF/classes目录下建立一个名称为validators.xml的配置文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 注册自定义的验证器 -->
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
    <validator name="strongpassword" class="cn.itcast.validators.StrongPasswordValidator"/>
</validators>
  d、日后就可以像使用Struts2提供的16个验证器方式去使用了。
  
二、Struts2对于i18n的支持
 全局资源文件/包范围资源文件/动作类的资源文件
 全局资源文件:放到WEB-INF/classes目录下
 包范围资源文件:服务于Java类中的包下的动作类的。
   取名:package_语言_国家.properties
 
 动作类的资源文件:放到与动作类相同的包中
   取名:动作类名_语言_国家.properties
   
   
 jsp中如何读取国际化的消息
 动作类中如何读取国际化的消息
三、OGNL表达式:
 OGNL是从ActionContext中获取数据的。
 
 ActionContext的结构:
  ValueStack:
   List:动作类放在此处。取存放在ValueStack中的root的对象的属性,直接写即可
   
   访问以下内容中的对象要使用#+(范围)session
  application:ServletContext中的那个Map
  session:HttpSession中的那个Map
  request:ServletRequest中的那个Map
  parameters:请求参数的那个Map。(如同EL表达式的paramValues内置对象)
  attr:相当于PageContext的findAttribute方法。${username}
 小技巧:在页面中使用<s:debug/>查看上下文中的对象

 

 

一)OGNL简介
   (1)回顾EL的作用
 A)能获取域对象(page/request/session/application)中的数据,例如:${sessionScope.username} 
 B)运算和判断,例如:${10 * 10},${!empty sessionScope.username?sessionScope.username:'游客'}
 C)EL函数,例如:${fn:toUpper('www.itcast.cn')}
   (2)OGNL的作用(对象图导航语言,struts2专用的标记语言,比EL更强大)      
  A)获取ActionContext中的数据
  B)集合操作,即访问list,map
   (3)理解ActionContext对象 
 A)ActionContext对象是struts2的数据中心,在一次符合/*模式的请求到来时,框架负责创建,放置在request域
    对象中。
        B)ActionContext对象可以分为如下几个子对象。
    参见<<ActionContext对象的六个子对象.JPG>>
        C)ActionContext有一个非常重要和特殊的对象,叫值栈,它是Action的数据中心,在一次符合/*模式的请求到来时,
           框架负责创建,放置在request域对象中。
  D)值栈分为二个部分:
    》对象栈(List集合)
      Action的实例
      Action的属性   
  
    》Map栈(Map集合) 
      通过ValueStack的API操作的对象
      
  page->request->ValueStack->session->application->
  如果都找不到,返回空白字符串
  如果找到了,不会再继续查找
  在struts2中,不提倡使用request来存内容,而使用ValueStack来替换requset对象
     
//演示向ActionContext对象中六个子对象存数据
public class BaseAction extends ActionSupport{
 public String execute() throws Exception {

  //获取struts2的数据中心
  ActionContext actionContext = ActionContext.getContext();
  
  /*向request中存入数据
  ServletActionContext
   .getRequest()
   .setAttribute("username","requestMap");
  */ 
  
  //向sessionMap中存入数据
  //actionContext.getSession().put("username","sessionMap");
  
  //向applicationMap中存入数据
  //actionContext.getApplication().put("username","applicationMap");
  
  //向ValueStack中存入数据
  //actionContext.getValueStack().set("username","ValueStack");
  
  return this.SUCCESS;
 }
}

    <%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <body>
  <%
   //pageContext.setAttribute("username","page");
  %>
  获取ActionContext对象中六个子对象的数据<br/>
  requestMap:<s:property value="#request.username"/><br/>   
  sessionMap:<s:property value="#session.username"/><br/>   
  applicationMap:<s:property value="#application.username"/><br/>   
  ValueStack:<s:property value="username"/><br/>  
  parameters:<s:property value="#parameters.username"/><br/>
  <b>attr:<s:property value="#attr.username"/></b> 
 </body>
</html>

二)OGNL的4种符号用法
   *(1)#
 >>访问ActionContext对象
 >>访问集合Map:#{'male':'[男]','female':'[女]'}
 >>访问集合List
   A)集合的投影:userList.{username,JavaBean的某个属性值}
   B)集合的过滤:userList.{?#this.age>22}
         userList.{^#this.age>22}
                       userList.{$#this.age>22}.{?#this.gender=="男"}
         ?#表示所有对象  
         ^#表示第一个对象  
         $#表示最后一个对象 
   this表示当前迭代的这个对象 
          C)集合的投影和过滤:userList.{?#this.age>22}[0]
        [0]表示符合条件的第一个对象 
               [1]表示符合条件的第二个对象 

 什么情况下使用#:
 A)非值栈
 B)获取JavaBean属性值
  
   (2)%{}:
  >><s:textfield label="%{usernameTIP变量}" name="username"/>
  >><s:textfield label="%{'usernameTIP'常量}" name="username"/>
   (3)${}不是EL:
  >><field-validator type="double">
  <param name="minInclusive">4000</param>
  <param name=" maxInclusive">6000</param>
  <message>薪水必须介于${minInclusive}到${maxInclusive}之间</message>
    </field-validator> 
    ${}可以访问xml本身的数据
         >><param name="contentDisposition">attachment;filename=${filename}</param> 
    ${}也可以访问Action实例变量,前提Action一定要对该实例变量提供getXxx()方法
   (4)访问集合List或{}
         >>value='{"AA","BB","CC","DD"}'
         >><s:property value="stringList.isEmpty"/>
         >><s:property value="stringList.size"/>

  在迭代List或数组时,#可要可不要

三)struts2常用标签介绍 
    1)标签(M) :为了显示出某种特殊的效果,struts2对普通进封装后产生的对象,叫标签。
    struts2标签底层,都是处理类,例如:<s:textfield/> 

    2)模板(N) :将所有风格显示相类型的标签,形成一个集合,该集合就叫做模板。 
    1个模板对应N个标签

    3)主题(1) :将N个模板所表现出来的内容,形成一个集合,该集合就叫做主题。
    1个主题对应N个模板   

    4)struts2的四类主题
       A)simple主题:checkbox,无<table>,灵活  
       B)xhtml主题:checkbox(struts2默认主题)有<table>
       C)css_xhtml主题:checkbox,无<table>,用div替换<table>
       D)ajax主题:checkbox        

    5)修改主题的三种方式
       A)在某个表单标签中修改,例如:<s:textfield label="用户名" name="username" theme="simple"/> 
       B)在<s:form>标签中使用theme,争对整个表单中的所有表单项元素<s:form theme="simple"/>
       C)在struts.property文件中,覆盖系统的整体风格,struts.ui.theme=simple 
       当A,B,C同时作用某一个表单标签时,A起决定作用 

    6)标签的四种作用
       A)[布局]
       B)表单项数据回显  
       C)错误信息显示   
       D)国际化          

    7)常用标签
      *>>s:fielderror
      *>>s:property
      *>>s:text

      *>>s:form
      *>>s:textfield
      *>>s:password
      *>>s:submit
      *>>s:reset
      *>>s:hidden   
      *>>s:textarea
         当需要将jquery加入进来时,需要注意二点:
  A)引用jquery的路径,使用绝对路径,例如:/day34/js/jquery-1.8.2.min.js
  B)定位某个标签时,不能使用struts2标签,只能使用普标签
      *>>s:radio【listValue页面中显示的值,listKey页面中隐藏的值】
      *>>s:select
      *>>s:checkboxlist
      *>>s:property
       >>s:bean
       >>s:param
       >>s:url
       >>s:set
       >>s:include
       >>s:date
      *>>s:if-s:elseif-s:else
      *>>s:iterator
       >>s:sort【实现Comparator接口】

0
0
分享到:
评论

相关推荐

    struts2帮助文档

    struts2中的国际化 struts2转化器 struts2实现表单数据校验 struts2的基石-拦截器 struts2中实现IOC struts2中实现文件上传 struts2中实现CRUD struts2中的OGNL struts2的新表单标志的使用 struts2与AJAX一 struts2...

    struts2讲义_吴峻申

    8.2.3 Struts2输入校验出错信息的国际化配置形式 163 8.3 集合类型输入校验介绍 165 8.3.1 Struts2中单个Java对象的输入校验形式 166 8.3.2 Struts2对象集合即批量输入的校验形式 169 8.4 Struts2输入校验器大全 171...

    个人认为目前最完备的Struts2教程

    06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 Struts 2的...

    struts2入门教程

    ·Struts2国际化(i18n)您的应用程序 ·Struts2.0转换器(Converter) ·Struts 2.0中实现表单数据校验(Validation) ·拦截器(Interceptor) ·Struts 2中实现IoC ·Struts 2中实现文件上传 ·Struts 2中的...

    struts2.0中文教程

    06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新...

    Struts 2.0系列(MAX)

    在Struts 2.0中实现表单数据校验(Validation) Struts 2的基石——拦截器(Interceptor) 在Struts 2中实现IoC 在Struts 2中实现文件上传 在Struts 2中实现CRUD Struts 2中的OGNL Strus 2的新表单标志的使用 ...

    struts2 详解文档

    介绍Struts 2及Struts 2开发环境的搭建 第一个Struts 2应用开发 解决Struts 2配置文件无提示问题 Action名称的搜索顺序 Action配置的各项默认值 result配置的各种视图转发类型 为Action属性注入值 指定...

    Struts2.0中文教程权威版

    06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新...

    Struts2技术手册-Struts2精华教程-电子书

    本书内容非常全面,涵盖了众多书籍所有知识要点,并结合作者自己经验总结而编写...国际化 .....token令牌 .....文件上传 .....文件下载 .....插件_JSON .....插件_DOJO .....插件_convention .....插件_config-browser

    基于struts2 的网络U盘

    数据库包括用户表和文件表,项目主体由Struts2框架搭建,前台jsp页面表单使用OGNL标签,XX_zh_CN(en_US).properties文件实现中英文国际化,XXAction-validation.xml实现表单校验,MD5加密文件绝对路径,保护文件安全...

    Struts2入门教程(全新完整版)

    十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...

    struts2官方教程

    struts2官方教程,本书是一本从头至尾都使用现实世界例子讲述有关编写Web应用程序的书籍。WebWork所强调的内容是:利用框架实现你的项目,而不是被框架所阻碍。在本书中,我们将从简单的表单及表单处理开始,逐一...

    Struts2总结-2

    总结了ognl , 值栈,向值栈中放数据获取数据,拦截器,国际化资源的使用,校验器

    struts2.1宝典

    struts2表单标签 1 1、struts资源文件中文解决方法 1 2、开发struts2流程 1 3、创建拦截器: 2 4.标签中引用资源文件内容 3 5.创建资源文件 3 6.Action中访问servlet API 3 7.Action访问资源文件 3 8.资源文件_...

    精讲Struts2

    精简全面讲解Struts 2.0Struts2产生背景 工作原理 实现步骤 标签 命名空间 转换器 国际化 输出 令牌机制 拦截器 表单校验(jQuery.validate验证框架) 上传 下载 OGNL(ActionContext StackContext ValueStack区别)

    低清版 大型门户网站是这样炼成的.pdf

    2.5.3 自定义国际化struts 2校验错误消息 92 2.5.4 struts 2的自带校验器 92 2.6 struts 2的拦截器 94 2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100...

    Java Web程序设计教程

    6.3.3应用struts2输入校验框架 128 6.3.4自定义校验器 130 6.4国际化 131 6.4.1国际化实现原理 131 6.4.2准备国际化资源文件 131 6.4.3调用国际化资源文件 134 6.5上传和下载 135 6.5.1文件上传的实现原理 ...

    Struts2入门教程。包括jquery集成等。入门必看

    4.2 struts2框架实现数据校验.....................................................................................................................34 第 5章 国际化实现......................................

    struts2深入浅出(备java基础,javaweb,javaee,框架)

    Struts2框架介绍、工作原理与架构分析、6大配置文件分析使用通配符定义action、动态方法调用,ActionContext及ServletActionContext使用,模型驱动、属性驱动,默认转换器的介绍,中的表单校验,中的国际化,文件...

Global site tag (gtag.js) - Google Analytics