`
cheney463
  • 浏览: 30375 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Struts2中Validation和Type Conversion

阅读更多

在Struts2中,采用Validation Interceptor来完成校验支持,在struts-default.xml中,先调用conversionError interceptor进行type conversion操作,然后调用params preparevalidation interceptor完成对字段校验,interceptor的执行顺序是

  1. 型别转换 (type conversion)
  2. 获取参数信心(params )
  3. 为验证等作准备(prepare)
  4. 参数验证 (validation)

    如果在进行type conversion时候发生错误,struts2对同样的字段就不会进行验证,会抛出异常,例如页面一输入字段希望进行是否为整数验证,由于页面输入值缺省都为String类型,因此会在后台抛出类似的错误:

ERROR (com.opensymphony.xwork2.interceptor.ParametersInterceptor:204) - ParametersInterceptor - [setParameters]: Unexpected Exception caught setting 'integerTest' on 'class com.mobilesoft.esales.webapp.action.MyValidationAction: Error setting expression 'integerTest' with value '[Ljava.lang.String;@11e170c'

    而在验证页面,会抛出如下的错误信息:

    Invalid field value for field "integerTest"

   怎么把"Invalid field value for ..." 这样的信息转化成我们指定的信息,方法有几个:

1自定义转换类

将页面非String 类型的property转换成指定的类型,这样进行validation验证

  参看http://struts.apache.org/2.0.11.1/docs/type-conversion.html

  对于页面输入有意义的validator实际上只有requireddateint几个有意义,其它的意义都不大;同时由于要做单独的类型转换类,比较麻烦,不采用此种方式

2采用struts2的i18n支持

又有几种方法

2.1在资源文件中设定全局的xwork.default.invalid.fieldvalue 属性

xwork.default.invalid.fieldvalue=数据格式不正确

2.2在资源文件中设定invalid.fieldvalue.字段名称属性

invalid.fieldvalue.integerTest=数据格式不正确

2.3定义针对每一个Action的properties文件

例如在MyValidationAction.properties(与MyValidationAction放在同一目录中,而不是在classes下)中定义

invalid.fieldvalue.integerTest=数据格式不正确

注意:

  • 目前在架构中,资源文件命名为ApplicationResources.properties,ApplicationResources_zh.properties,在web.xml中定义的:

<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>ApplicationResources</param-value>
</context-param>

  • struts2缺省提供了一些type conversion 类,能够完成一些基本的转换操作:

String

boolean / Boolean

char / Character

int / Integer, float / Float, long / Long, double / Double

dates - uses the SHORT format for the Locale associated with the current request

arrays - assuming the individual strings can be coverted to the individual items

collections - if not object type can be determined, it is assumed to be a String and a new ArrayList is created

  • 要完成客户端校验,注意在<s:form >上添加validate="true"

  <s:form action ="myValidationAction" validate="true" >

 

3例子

3.1validationInput.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" errorPage="/error.jsp" pageEncoding="GBK" contentType="text/html;charset=GBK" %>

<html>
<head>
    <title> Validation测试 </title>
    <s:head />
</head>
<body>
    <s:form action ="myValidationAction" validate="true" >           
        <s:textfield label ="String类型测试" />
        <s:textfield label ="Integer类型测试" />
        <s:textfield label ="email类型测试" />
        <s:submit />
    </s:form>   
</body>
</html>

3.2validationOutput.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" errorPage="/error.jsp" pageEncoding="GBK" contentType="text/html;charset=GBK" %>

<html>
<head>
    <title> Hello World </title>
</head>
<body>
    String类型测试: <s:property value ="strTest" />   <br/>
    Integer类型测试: <s:property value ="integerTest" />  <br/> 
    email类型测试: <s:property value ="emailTest" />    <br/>
</body>
</html>

 

3.3MyValidationAction-validation.xml

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN"
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
    <field >
        <field-validator type="requiredstring">
            <message>字段不能为空</message>
        </field-validator>
    </field>

  <field >
<field-validator type="conversion"> 
     <message>conversion</message> 
</field-validator>
      <field-validator type="required">
          <message>字段不能为空</message>
      </field-validator>
      <field-validator type="int">
          <param >6</param>
          <param >10</param>
          <message>值必须在 [ ${min}, ${max}], 当前的值是: ${integerTest}.</message>
      </field-validator>
  </field>
    <field >
          <field-validator type="required">
          <message>字段不能为空</message>
      </field-validator>
        <field-validator type="email">
            <message>字段必须为邮件地址</message>
        </field-validator>
    </field>
</validators>

3.4MyValidationAction.java

package com.mobilesoft.esales.webapp.action;

public class MyValidationAction extends BaseAction {
    private String strTest;
    private Integer integerTest;
    private String emailTest;
    public String execute(){
        return SUCCESS;
    }
    public String getStrTest() {
        return strTest;
    }
    public void setStrTest(String strTest) {
        this.strTest = strTest;
    }
    public Integer getIntegerTest() {
        return integerTest;
    }
    public void setIntegerTest(Integer integerTest) {
        this.integerTest = integerTest;
    }
    public String getEmailTest() {
        return emailTest;
    }
    public void setEmailTest(String emailTest) {
        this.emailTest = emailTest;
    }

}

 

3.5struts.xml

<action method="execute" >
    <result >validationOutput.jsp</result>
    <result >validationInput.jsp</result>
</action>    

4参考文档

http://struts.apache.org/2.x/docs/validation.html

http://struts.apache.org/2.0.11.1/docs/type-conversion.html

http://struts.apache.org/2.x/docs/localizing-output.html

分享到:
评论

相关推荐

    struts2中文帮助文档

    1. **Action和Result**:Struts2中的核心组件是Action类,它代表了应用程序中的业务逻辑。当用户进行操作时,请求会被映射到相应的Action,执行完业务逻辑后,会通过Result返回相应的视图。Result可以是JSP、...

    Struts2中的xwork源代码

    5. **TypeConversion**:Struts2提供了一套强大的类型转换机制,允许将请求参数自动转换为动作属性的类型。这主要由Converter接口和ConversionService接口实现,开发者可以自定义转换规则。 6. **Validation**:...

    Struts2验证框架的配置及validation.xml常用的验证规则

    在Struts2中,表单验证是一项重要的功能,它确保了用户输入的数据符合预期的格式和范围,从而提高了应用的安全性和用户体验。本文将详细介绍Struts2验证框架的配置方法以及validation.xml文件中常用的验证规则。 ##...

    struts2使用手册

    - **验证与转换(Validation & Conversion)**:Struts2提供了一套完整的验证和转换机制,可以在提交表单之前对用户输入的数据进行校验和格式化。 #### 六、总结 Struts2不仅解决了Struts1.x中存在的诸多问题,还...

    struts2类型转换 拦截器 校验的例子

    在Struts2中,用户通过表单提交的数据通常是字符串,而服务器端处理时往往需要将其转化为其他类型,如整型、浮点型或日期等。Struts2内置了一套类型转换机制,能够自动将字符串数据转化为预设的类型。如果默认的转换...

    struts2xwork2帮助文档

    3. **Type Conversion**:XWork2提供类型转换机制,自动将请求参数转换为Action字段的类型。 4. **Exception Handling**:强大的异常处理机制,允许自定义错误页面和异常策略。 5. **Validation框架**:集成验证...

    struts2inaction

    - **拦截器(Interceptors)**:拦截器是Struts 2中的另一个关键组件,它允许开发者对动作执行前后的行为进行定制,例如自动管理事务、验证用户输入等。 - **类型转换(Type Conversion)**:Struts 2提供了自动的...

    struts-xwork-core源码

    - Action是Struts2中的业务逻辑组件,负责处理用户请求。每个Action类都对应一个特定的业务操作。 - ActionContext封装了与当前请求相关的上下文信息,如参数、session、application等,是Action执行时的重要环境...

    Struts2表单验证

    2. 转换过程中如果出现异常,异常信息会被保存并由conversionError拦截器处理,封装到fieldError中。 3. 如果存在validateXxx()方法,会先调用该方法进行验证。 4. 接下来调用Action类的validate()方法进行全局验证...

    浪曦\浪曦_Struts2应用开发系列_第1讲

    - **安装与环境搭建**:首先,你需要设置Java环境和Apache Tomcat服务器,然后通过Maven或手动方式将Struts2的依赖添加到项目中。 - **创建第一个Struts2应用**:创建一个简单的Hello World程序,了解Action类、...

    struts2视频自学总结

    Struts2内置了一套表单验证机制,可以在`validation.xml`文件中定义验证规则。当验证失败时,Struts2会自动跳转到错误页面并显示错误信息,这些信息可以通过`invalid.fieldvalue`属性来自定义。 #### 拦截器与执行...

    struts2 类型转换 数据校验

    在Struts2中,类型转换和数据校验是两个关键的特性,它们确保了用户输入的数据能够准确无误地被处理和验证,从而提高了应用的安全性和可靠性。 **类型转换(Type Conversion)** 在Struts2中,类型转换是自动进行...

    Struts2.3.1与Spring3.1整合时需要的jar包

    2. `xwork-core-2.3.1.jar`:XWork是Struts2的基础,提供了Action、Validation和Type Conversion等功能,与Struts2的核心库紧密关联。 3. `freemarker-2.3.18.jar`:FreeMarker是一个模板引擎,Struts2默认使用的...

    struts-2.3.1.2-docs.zip

    2. **拦截器(Interceptors)**:这是Struts2的一大特色,拦截器可以插入到Action调用的链路中,实现诸如日志、权限检查、性能监控等功能,增强了代码的可复用性和可扩展性。 3. **配置管理**:通过XML或注解进行...

    Struts2.3.1.1.zip

    2. **强大的拦截器(Interceptors)**:拦截器是Struts2中的一大亮点,它们可以像过滤器一样在Action执行前后执行一系列预定义的任务,如日志记录、权限验证等,增强了代码的可复用性和可扩展性。 3. **模板技术**...

    Struts2.3.4.1 注解实例(二十)

    在Struts2中,注解可以用于Action类、方法、参数、结果配置等,减少了XML配置文件的依赖,使代码更易于理解和维护。 1. **Action类注解**: `@Action` 注解用于标记一个类为Struts2的Action,它可以替代struts.xml...

    struts2.1.6全部jar包

    3. **ognl.jar**:Object-Graph Navigation Language (OGNL) 是Struts2中用于表达式语言的库,用于在Action和视图之间传递数据。 4. **freemarker.jar**:Freemarker是一个模板引擎,Struts2使用它来生成动态HTML...

Global site tag (gtag.js) - Google Analytics