struts2自定义类型转换器
2014-08-05 22:33
447 查看
虽然内建的类型转换器能满足大多数需求,但是有时候还是需要使用自定义的类型转换器来实现特定的需求。
比如在页面上面输入width:height,形如16:9,这个时候就需要自定义类型转换器了。
如何实现自定义类型转换器呢
1 写一个类继承StrutsTypeConverter类,这个抽象类有两个方法需要用户实现:
public Object convertFromString(Map context, String[] values, Class toClass) 实现字符串向对象的转换
public String convertToString(Map context, Object o) 实现对象向字符串的转换
在提交表单的时候,会调用convertFromString方法,在显示结果页面的时候,会调用convertToString方法。
2 提交表单页面
3 实现action
4 显示结果页面
以上这句话会引用自定义类型转换器,因为这时候要把一个字符串转换成Rectangle对象。
5 注册自定义转换器
1 如果是全局类型转换器在src下建立一个xwork-conversion.properties文件,这个文件中用全类型=这个类对应的类型转换器全类名。
xwork-conversion.properties 文件名
com.domain.Rectangle=com.login.AllConverter
2 如果是类级类型转换器,在使用该类型的action同包下面建立一个Action名-conversion.properties文件,属性名=这个类对应的类型转换器全类名。
HelloWorldAction-conversion.properties 文件名
rectangle=com.login.AllConverter
3 类级类型转换器会覆盖全局类型转换器的引用。
比如在页面上面输入width:height,形如16:9,这个时候就需要自定义类型转换器了。
如何实现自定义类型转换器呢
1 写一个类继承StrutsTypeConverter类,这个抽象类有两个方法需要用户实现:
public Object convertFromString(Map context, String[] values, Class toClass) 实现字符串向对象的转换
public String convertToString(Map context, Object o) 实现对象向字符串的转换
在提交表单的时候,会调用convertFromString方法,在显示结果页面的时候,会调用convertToString方法。
<span style="font-family:SimHei;font-size:18px;">package com.login; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.domain.Rectangle; public class AllConverter extends StrutsTypeConverter { private static SimpleDateFormat dateformat=new SimpleDateFormat("yyyyMMdd"); public Object convertFromString(Map context, String[] values, Class toClass) { System.out.println("values length="+values.length); System.out.println("values="+values[0]); if(toClass==Date.class){ String s=values[0]; Date d=null; try { if("".equals(s.trim())){ return ""; } d = dateformat.parse(s); } catch (ParseException e) { e.printStackTrace(); } return d; }else if(toClass==Rectangle.class){ String s=values[0]; System.out.println(s); String str[]=s.split(":"); System.out.println(str); if(str.length<2){ throw new TypeConversionException("请输入正确的宽度和高度,形如 宽度:高度"); } int width=Integer.parseInt(str[0]); int height=Integer.parseInt(str[1]); System.out.println(width); System.out.println(height); Rectangle r=new Rectangle(); r.setHeight(height); r.setWidth(width); return r; } return null; } public String convertToString(Map context, Object o) { if(o instanceof Rectangle){ Rectangle r=(Rectangle) o; String s=r.getWidth()+":"+r.getHeight(); return s; } return null; } } </span>
2 提交表单页面
<span style="font-family:SimHei;font-size:18px;"> <form action="helloworld.action" method="post"> rectangle:<input type="text" name="rectangle"><br> <input type="submit" value="submit"><br> </form> </span>
3 实现action
<span style="font-family:SimHei;font-size:18px;">package com.login; import com.domain.*; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import java.util.*; import javax.servlet.ServletContext; import javax.servlet.http.*; import org.apache.struts2.*; public class HelloWorldAction extends ActionSupport { private static final long serialVersionUID = 7227184666830968247L; private Rectangle rectangle ; public String execute() { System.out.println(" Height= "+rectangle.getHeight()+" , Width= "+rectangle.getWidth()); return "success"; } public Rectangle getRectangle() { return rectangle; } public void setRectangle(Rectangle rectangle) { this.rectangle = rectangle; } }</span>
4 显示结果页面
<span style="font-family:SimHei;font-size:18px;"> rectangle:<s:property value="rectangle"/><br></span>
以上这句话会引用自定义类型转换器,因为这时候要把一个字符串转换成Rectangle对象。
5 注册自定义转换器
1 如果是全局类型转换器在src下建立一个xwork-conversion.properties文件,这个文件中用全类型=这个类对应的类型转换器全类名。
xwork-conversion.properties 文件名
com.domain.Rectangle=com.login.AllConverter
2 如果是类级类型转换器,在使用该类型的action同包下面建立一个Action名-conversion.properties文件,属性名=这个类对应的类型转换器全类名。
HelloWorldAction-conversion.properties 文件名
rectangle=com.login.AllConverter
3 类级类型转换器会覆盖全局类型转换器的引用。
相关文章推荐
- Struts2自定义类型转换器
- Struts2实现自定义转换器和全局类型转换器
- Struts2实现自定义转换器和全局类型转换器
- Struts2之自定义类型转换器
- Struts2学习5--自定义类型转换器(1)
- 为struts2自定义类型转换器:Date的转换
- Java乔晓松-Struts2中通配符、常量、自定义类型转换器以及接受请求参数处理
- struts2实现Date类型转换和自定义类型转换器
- 框架学习之Struts2 第三节 请求参数的接收和自定义类型转换器
- struts2自定义类型转换器:DefaultTypeConverter
- Struts2的自定义类型转换器
- Struts2 自定义类型转换器
- Struts2的自定义类型转换器
- Struts2 自定义类型转换器的简单示例
- Struts2自定义类型转换器
- struts2自定义类型转换器
- Struts2的自定义类型转换器实例
- struts2 自定义类型转换器
- 4.1.4: Struts2的类型转换---自定义类型转换器
- struts2自定义类型转换器