`

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_OGNL Demo

    Struts2_OGNL Demo 是一个用于演示Struts2框架中OGNL(Object-Graph Navigation Language)表达式语言的实例。这个项目旨在帮助开发者理解和学习如何在Struts2中使用OGNL来操纵对象和数据。OGNL是Struts2中一个重要的...

    Struts2_OGNL

    在掌握Struts2和OGNL的基础上,开发者可以进一步学习Struts2的其他组件和特性,如标签库、异常处理、国际化支持、拦截器机制、输入校验、文件上传和下载等,这些都是构建复杂Web应用不可或缺的组件和功能。

    Java实训教程 Java软件开发实战 Java开发框架struts2介绍 共12个章节.rar

    【课程大纲】 struts2_1_入门介绍 共29页.pptx struts2_2_Action详解 共43页.pptx struts2_3_配置参数详解 共47页.pptx struts2_4_OGNL 共71页.pptx ...struts2_表单校验失败跳input视图问题 共13页.pptx

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2 SpringMVC等共20多份课件资料.rar

    struts2_表单校验失败跳input视图问题 共13页.pptx SpringMVC_1_开发环境搭建 共41页.pptx SpringMVC_2_HelloWorld 共19页.pptx SpringMVC_3_方法入参 共41页.pptx SpringMVC_4_方法返回值 共25页.pptx SpringMVC_5...

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_表单校验失败跳input视图问题共13页.pptx

    ### Java Struts2框架中的表单校验及处理机制 #### Struts2简介 Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它简化了Web应用程序的开发过程,提供了丰富的特性来支持复杂的业务...

    Struts2 校验器

    7. **国际化支持**:Struts2允许使用资源包(properties文件)为不同语言的用户提供本地化的错误消息。 8. **整合其他验证框架**:除了内置的验证功能,Struts2还可以与Hibernate Validator、JSR 303/JSR 349等Java...

    Struts2_学习笔记.zip

    这个"Struts2_学习笔记"包含了关于Struts2框架的深入学习资料,是理解并掌握Struts2核心概念和技术的关键。 Struts2的核心设计理念是模型-视图-控制器(MVC)架构模式,它简化了Java Web开发,将业务逻辑、数据展示...

    struts2--3.Ognl与值栈

    当用户提交表单数据时,Struts2会使用OGNL将这些数据绑定到值栈中的Action对象。然后,Action执行业务逻辑,处理完成后,结果再次通过OGNL解析并推入值栈,供视图层展示。这种设计使得开发者可以专注于业务逻辑,而...

    struts2_开始.doc

    这些 JAR 包包括 struts2-core、xwork-core、ognl、freemarker、commons-logging 和 commons-fileupload,它们提供了 Struts2 框架的核心功能、表达式语言支持、模板引擎和文件上传等服务。 2. **提供 Struts2 的...

    struts2帮助文档

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

    研磨struts2_系列文章.pdf

    国际化是Web应用的重要组成部分,Struts2提供了强大的国际化支持,包括资源文件的管理和多语言文本的呈现。通过正确的配置,可以轻松实现应用的多语言切换,满足不同地区用户的需求。 综上所述,这份系列文章深入...

    J2EE考试复习试题_struts2_spring_hibernate.doc

    - **核心控制器**:Struts2的核心控制器是`StrutsPrepareAndExecuteFilter`,其初始化方法为`init`。 #### Hibernate配置与映射 - **数据库连接配置**:Hibernate配置数据库连接通常需要设置以下四个属性:`...

    struts2 简单数据校验

    在“Struts2_1100_SimpleDataValiation”这个压缩包中,可能包含了相关的代码示例、教程文档,或者是一个简单的Struts2项目,用于演示如何在实际应用中实现数据校验。你可以通过解压文件,学习和理解Struts2数据校验...

    struts 2 基础2__继承ActionSupport完成输入校验

    `ActionSupport`是Struts2提供的一种基础Action实现,它包含了默认的行为,如错误处理、国际化支持和校验框架。当我们创建自定义的Action时,可以继承`ActionSupport`,利用其内置的功能,而不必从头开始编写所有...

    Struts2_基础

    Struts2提供了内置的表单验证功能,可以在Action类中定义校验规则,也可以通过XML配置文件进行。表单数据提交后,框架会自动进行验证,若失败则将错误信息返回给用户。 **第五章 用户登录** 用户登录功能是许多Web...

    struts2 Ognl表单提交问题

    ### Struts2 OGNL 表单提交问题详解 #### 一、背景介绍 Struts2框架作为一款流行的企业级应用开发框架,在处理MVC架构方面有着独特的优势。其中,OGNL (Object-Graph Navigation Language) 作为一种强大的表达式...

    Struts2简单数据校验源码 20120417

    本资料"Struts2_1100_SimpleDataValiation"提供了关于Struts2简单数据校验的源码,这将有助于我们深入理解Struts2的数据校验机制。 1. **Struts2数据校验框架概述** - Struts2的数据校验框架是基于OGNL(Object-...

    struts2讲义_吴峻申

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

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_2_Action详解 共43页.pptx

    ##### 3.4 国际化支持 - **多语言**:通过配置文件(`struts.properties`)和资源文件(`*.properties`)支持多语言环境。 - **实现方式**:通过设置不同的语言环境,动态加载相应的资源文件来实现多语言切换。 ##### ...

    struts2的自定义校验器例子

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化且易于管理的Web应用程序。在Struts2中,数据验证是确保输入数据质量和安全的重要环节。本示例将详细介绍如何在Struts2中创建并使用自定义校验器...

Global site tag (gtag.js) - Google Analytics