之前说的是调用Struts2的默认转换器,现在我们来说以下写自己的转换器,这个一般不常用,在访问不是自己写的类中可能用到。我们一点点来,因为写自己的转换器需要注意的东西还是很多的。

我们还是用之前的项目,新建一个Point,Point对象有xy属性没有set()方法,尽管我们可以用p.x来访问,现在我们不这样传递参数,我们传进来http://localhost:8080/Struts2_3700_type_conversion/test?p=2,3,这时候我们就要用到自己的转换器了。

我先把转换器贴出来看一看。

MyPointConverter.java

package com.tfj.converter;

import java.awt.Point;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class MyPointConverter extends DefaultTypeConverter{

	@Override
public Object convertValue(Object value, Class toType) {
if(toType==Point.class){
Point p = new Point();
String[] strs = (String[]) value;
String[] xy = strs[0].split(",");
p.x=Integer.parseInt(xy[0]);
p.y=Integer.parseInt(xy[1]);
return p; }
if(toType==String.class){
value.toString();
} return super.convertValue(value, toType);
} }

一会儿我们再来看转化器的实现,在用自己的转换器之前还需要注册,一般呢有三种注册方式。

1.action注册

提供如下格式的文件 
文件名:  ActionName-conversion.properties  
内容:多个propertyName(属性名)=类型转换器类(含包名),如  p=com.tfj.converter.MyPointConverter 
存放位置:和ActionName类相同路径。

2.全局注册

提供如下格式的文件 
文件名:  xwork-conversion.properties 
内容:   多个“复合类型=对应类型转换器”项组成,如  java.awt.Point=com.tfj.converter.MyPointConverter 
存放位置:WEB-INF/classes/目录下。

3.使用 JDK1.5 的注释来注册转换器。

接下来来说下转换器的实现,其实是传进来2,3先调用split()方法把它用“,”分割,再把“2”赋值给p.x,“3”赋值给p.y就可以了。(在注册的时候.properties文件的名字是固定的)。


Struts2 学习笔记20 类型转换part2 写自己的转换器的更多相关文章

  1. Struts2 学习笔记 11 Result part2

    之前学习了result type 和global result 我们现在来说一下 1.Dynamic Result动态结果集.先来看一下小项目的目录 首页的两个链接访问user/user?type=1 ...

  2. [Struts2学习笔记] -- 自定义类型转换

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  3. Struts2 学习笔记19 类型转换 Part1

    现在来说一说类型转换,提到类型转换其实我们之前早已经用过了,在url传递参数的时候,我们传递过来的参数其实都是String类型的,在显示的时候都自动转换了,像这种简单的转换很好理解,我们要说的是,转换 ...

  4. Struts2学习笔记(七)——类型转换

    1.自动类型转换 Struts2内部提供大量类型转换器,用来完成数据类型转换问题: String和boolean.Boolean:完成字符串与布尔值之间的转换 String和char.Characte ...

  5. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  6. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  7. TCP/IP详解学习笔记 这位仁兄写得太好了.(转载)

    TCP/IP详解学习笔记   这位仁兄写得太好了   TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/20444 ...

  8. Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法

    Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法 在上一篇笔记中我们介绍了Ext.Net的简单用法,并创建了一个简单的登录表单.今天我们将看一下如何更好是使用FormPanel ...

  9. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

随机推荐

  1. Scala写排序可以说是简洁又明了

    例如归并排序,清晰明了. object MergeSort extends App {     val oldList = List[Int](12, 40, 26, 89, 75, 44, 32,  ...

  2. 应用程序缓存 AppCache

    Application Cache HTML5提供了一系列的特性来支持离线应用: application cache localStrorage web SQL & indexed datab ...

  3. Web自动化基础分享

    一.Selenium 简介 Selenium 是 ThoughtWorks 专门为 Web 应用程序编写的一个验收测试工具. 与其他测试工具相比,使用 Selenium 的最大好处是: Seleniu ...

  4. git Feature分支

    Feature分支 软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在 ...

  5. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(二)

    这篇文章的理解,需要一些专业知识了. 我们可以创建模拟自己的外设吗? 我们已经知道什么是qemu了,我们可以通过qmeu的提供的外设,DIY一个计算机了. 但是我们可能还不满足,我们可以自己制造一个外 ...

  6. linux 磁盘空间扩容 vg(+pv) lv(+空间) lv(缩减磁盘空间)

    preFace APP scenario description: 当你未能合理的规划存储时,在后期的维护工作中可能会涉及的存储的 再规划(eg,某一个 or 数个App 对某一个lv 即挂载点写Bi ...

  7. ultravnc

    virsh attach-disk

  8. SPOJ GSS1 && GSS3 (无更新/更新单点,并询问区间最大连续和)

    http://www.spoj.com/problems/GSS1/ 题意:无更新询问区间最大连续和. 做法:线段树每个节点维护sum[rt],maxsum[rt],lsum[rt],rsum[rt] ...

  9. ubuntu 安装mysql, 以及全然又一次安装的方法

    sudo apt-get install mysql-server 装完后 是无法远程訪问的. 要先改动 sudo vim /etc/mysql/my.cnf 找到 bind-address = 12 ...

  10. TIMESTEN安装配置指南-中文版

    TimesTen内存数据库 第一章 Cache Connect to Oracle概念 TimesTen数据交换技术提供在Oracle数据库和TimesTen数据管理器之间进行连接和双向数据传送.数据 ...