struts(类型转换器)

1. Struts2的类型转换,对于8个原生数据类型以及Date,String等常见类型,Struts2可以使用内建的类型转换器实现自动的转换;但对于自定义的类型转换来说,

就需要我们自己指定类型转器的方式。

2. 类型转换器必须继承DefaultTypeConverter,一般继承它的子类StrutsTypeConverter。action中调用set和get方法时,调用类型转换方法。

3. 自定义类型转换器的实现步骤:

1). 继承StrutsTypeConverter

2). 覆盖convertFromString和convertToString

范例:

public class UtilDateConverter extends StrutsTypeConverter {

private static final String PATTERN = "yyyy/MM/dd";

//浏览器提交到服务器是调用,将字符串转换成对象

@Override

public Object convertFromString(Map context, String[] values, Class toClass) {

//values为要转换属性的数组,可能有多个名字相同,所以取第一个。

String dateString = values[0];

SimpleDateFormat sdf = new SimpleDateFormat(PATTERN);

Date date = null;

try {

//字符串,转换成日期类型。

date = sdf.parse(dateString);

} catch (ParseException e) {

e.printStackTrace();

}

return date;

}

//服务器向浏览器输出时调用,将某种类型转换成字符串。o是要转换成字符串的对象。

@Override

public String convertToString(Map context, Object o) {

Date date = (Date)o;

return new SimpleDateFormat("yyyy年MM月dd日").format(date);

}

}
        3).注册类型转换器

a).局部类型转换器,局部类型转换器只对当前Action起作用,需要提供如下配置文件:

MyActionName-conversion.properties,MyActionName指需要使用转换器的Action名称”-conversion.properties“固定字符串,不能修改。

我们AddUserAction类型转换器的配置文件名称为:AddUserAction-conversion.properties,该配置文件必须和Action放到同一个目录中,该配

置文件的格式为:Action中的属性名称=转换器的完整路径,如:birthday=com.bjpowernode.struts2.UtilDateConverter 也可以转换数组,

同样需要有set和get方法。

b).全局类型转换器,全局类型转换器可以对所有的Action起作用(同Struts1的类型转换器),需要提供如下配置文件:

xwork-conversion.properties(该名字固定),该配置文件需要放到src下,该配置文件的格式:需要转换的类型完整路径=转换器的完整路径,

如:java.util.Date=com.bjpowernode.struts2.UtilDateConverter自定义类型也可以转换。

补:请求页面:

出生日期:<input type="text" name="birthday"><br>

显示页面:<s:property value="birthday"/> 或 <s:text name="date"></s:text>

4. 如果全局类型转换器和局部类型转换器同时存在,局部优先。

5. 采用struts2标签读取属性get方法时可以调用转换器的convertToString。采用JSTL不会调用,显示的是默认格式的时间。

6. 类型转换时,若发生异常,fieldError中会自动把异常加上,英文的。

7. 使用类型转换器须要在Action中提供属性的set和get方法

时间: 2024-11-13 03:57:22

struts(类型转换器)的相关文章

struts局部、全局类型转换器

第01步:编写bean package com.self.bean; import java.util.Date; public class User { private Date birthday = null; public Date getBirthday() { System.out.println("获得-User:" + birthday); return birthday; } public void setBirthday(Date birthday) { System

Struts 2 类型转换器 输入校验 拦截器

Struts 2中内建了字符串类型和常见类型之间相互转换的转换器,能满足大多数转换需求,但不能完成字符串和User对象之间的转换. OGNL项目中有一个TypeConvert接口,这个接口是自定义类型转换器必须要实现的接口,OGNL还提供了一个实现类: DefaultTypeConverter,自定义类型转换器(UserConverter类)须重写DefaultTypeConverter类的convertValue()方法.该方法可以实现字符串和对象之前相互转换 注册局部类型转换器:注册局部类型

Struts 2 之类型转换器

Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一种类型转换器供我们使用. 以下为局部类型转换器的开发步骤 a.首先要写一个类来继承DefaultTypeConverter b.然后覆盖convertValue

笔记02 文件上传、文件下载、类型转换器、国际化的支持

Struts2的上传 1. Struts2默认采用了apache commons-fileupload  2. Struts2支持三种类型的上传组件 3. 需要引入commons-fileupload相关依赖包 * commons-io-1.3.2.jar * commons-fileupload-1.2.1.jar 4. 表单中需要采用POST提交方式,编码类型需要使用:multipart/form-data 5. Struts2的Action     取得文件名称->>规则:输入域的名称+

Struts2之类型转换器

一.类型转换器的应用场景 类型转换是OGNL的一部分,默认的八种基本类型.String.Date会使用类型转换,但是更复杂的类型转换就需要我们自定义了(虽然这个东西一般根本用不到),OGNL可以应用在很多领域,但是在web领域,因为在客户端到服务器端传输的只是字符串,所以这里就有一个需求收缩,我们的需求就变为完成String和复杂对象之间的互相转换.在Struts2中的类型转换则是在客户端的请求参数往Action的成员属性中设置的时候会被调用. 二.如何使用? 1.理论部分 所有的类型转换器都要

关于StrutsTypeConverter类型转换器

<!-- 问题1: 如何覆盖默认的错误消息? 1). 在对应的 Action 类所在的包中新建 ActionClassName.properties 文件, ActionClassName 即为包含着输入字段的 Action 类的类名 2). 在属性文件中添加如下键值对: invalid.fieldvalue.fieldName=xxx 问题2: 如果是 simple 主题, 还会自动显示错误消息吗? 如果不会显示, 怎么办 ? 1). 通过 debug 标签, 可知若转换出错, 则在值栈的 A

【Java EE 学习第35天】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】

一.类型转换器 1.在动作类action中,声明和表单中name属性的值同名的属性,提供get和set方法,struts2就可以通过反射机制,从页面中获取对应的内容 1 package com.kdyzm.convert; 2 3 4 import com.opensymphony.xwork2.ActionSupport; 5 6 public class TypeConvertAction extends ActionSupport{ 7 private static final long

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

Struts2之局部与全局类型转换器

定义一个测试类 package struts2.example.action; import java.util.Date; public class HelloWorldAction { private Date birthday; public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { System.out.print(birthday); this.birthday =