Struts2中的类型转换
2009-03-22 16:44
471 查看
局部变量类型转换
我们看下面代码,InputAction中有一个属性point ,是PointBean类型
要做到针对point属性的转换,也就是 字符串->对象 对象->字符串
给出PointBean代码
首先,要在InputAction类的同包目录下建立名为InputAction-conversion.properties的资源文件
InputAction-conversion.properties这个属性 中划线前面是指类的名字,线后是固定名称。
然后在其中进行配置,表明要转换的属性,目前只有这一行,
point=cn.zhao.action.conver.PointConvert
point是指InputAction中的属性名,等号后面的内容是指针对些较换的具体实现类
下面,我们给出转换类代码
代码中首先根据要转换的目的类型进行判断if( String.class == toType ),然后执行相应的转换代码
转换类还有另一种写法,继承StrutsTypeConverter,实现其中的两个方法convertFromString
convertToString
下面给出代码
以上部分是局部类型转换,可以看出是针对某一个Action中的成员进行转换
下面介绍全局类型转换。
在classes下建立xwork-conversion.properties,名称固定!
配置文件中写入如下内容
cn.zhao.action.PointBean = cn.zhao.action.conver.CommonTypeConverPoint
等号前面,是指要转换的类型,等号后面,是指相应的转换类,此处我们使用了第二种转换方式
这样,在整个系统中,只要碰到PointBean类型的成员,便调用CommonTypeConverPoint类来转换,做到了
不受类的束缚,可以自由转换。
下面再介绍一种比较常用的转换方式,如果InputAction中有一个 private List<PointBean> points ;这样的成员
那么,转换类中应考虑循环
我们看下面代码,InputAction中有一个属性point ,是PointBean类型
要做到针对point属性的转换,也就是 字符串->对象 对象->字符串
package cn.zhao.action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class InputAction extends ActionSupport { private static final long serialVersionUID = 1L; private String name ; private int age ; private Date date ; private PointBean point ; public String getName() { return name ; } public void setName( String name ) { this.name = name ; } public int getAge() { return age ; } public void setAge( int age ) { this.age = age ; } public Date getDate() { return date ; } public void setDate( Date date ) { this.date = date ; } public PointBean getPoint() { return point ; } public void setPoint( PointBean point ) { this.point = point ; } @Override public String execute() throws Exception { return SUCCESS ; } @Override public void validate() { if( this.name == null || "".equals( this.name ) ) { this.addFieldError( "name", "对不起,姓名必须填写!" ) ; } if( this.date == null || "".equals( this.date ) ) { this.addFieldError( "date", "对不起,日期必须填写!" ) ; } } }
给出PointBean代码
package cn.zhao.action; public class PointBean { private int x ; private int y ; public int getX() { return x ; } public void setX( int x ) { this.x = x ; } public int getY() { return y ; } public void setY( int y ) { this.y = y ; } }
首先,要在InputAction类的同包目录下建立名为InputAction-conversion.properties的资源文件
InputAction-conversion.properties这个属性 中划线前面是指类的名字,线后是固定名称。
然后在其中进行配置,表明要转换的属性,目前只有这一行,
point=cn.zhao.action.conver.PointConvert
point是指InputAction中的属性名,等号后面的内容是指针对些较换的具体实现类
下面,我们给出转换类代码
package cn.zhao.action.conver; import java.util.Map; import cn.zhao.action.PointBean; import ognl.DefaultTypeConverter; public class PointConvert extends DefaultTypeConverter { @Override public Object convertValue( Map context , Object value , Class toType ) { if( String.class == toType ) { PointBean bean = ( PointBean ) value ; StringBuffer sb = new StringBuffer() ; sb.append( "[" ) ; sb.append( String.valueOf( bean.getX())) ; sb.append( String.valueOf( bean.getY())) ; sb.append( "]" ) ; return sb.toString() ; } else if ( PointBean.class == toType ) { PointBean bean = new PointBean() ; String[] strs = ( String[] )value ; String[] parms = ( String[] ) strs[0].split( "," ) ; bean.setX( Integer.parseInt( parms[ 0 ] ) ) ; bean.setY( Integer.parseInt( parms[ 1 ] ) ) ; return bean ; } return null ; } }
代码中首先根据要转换的目的类型进行判断if( String.class == toType ),然后执行相应的转换代码
转换类还有另一种写法,继承StrutsTypeConverter,实现其中的两个方法convertFromString
convertToString
下面给出代码
package cn.zhao.action.conver; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import cn.zhao.action.PointBean; public class CommonTypeConverPoint extends StrutsTypeConverter { @Override public Object convertFromString( Map context, String[] values, Class toClass ) { PointBean bean = new PointBean() ; String[] parms = ( String[] ) values[0].split( "," ) ; bean.setX( Integer.parseInt( parms[ 0 ] ) ) ; bean.setY( Integer.parseInt( parms[ 1 ] ) ) ; return bean ; } @Override public String convertToString( Map context, Object o ) { PointBean bean = ( PointBean ) o ; StringBuffer sb = new StringBuffer() ; sb.append( "[ x = " ) ; sb.append( String.valueOf( bean.getX())) ; sb.append( " y = " ) ; sb.append( String.valueOf( bean.getY())) ; sb.append( " ]" ) ; return sb.toString() ; } }
以上部分是局部类型转换,可以看出是针对某一个Action中的成员进行转换
下面介绍全局类型转换。
在classes下建立xwork-conversion.properties,名称固定!
配置文件中写入如下内容
cn.zhao.action.PointBean = cn.zhao.action.conver.CommonTypeConverPoint
等号前面,是指要转换的类型,等号后面,是指相应的转换类,此处我们使用了第二种转换方式
这样,在整个系统中,只要碰到PointBean类型的成员,便调用CommonTypeConverPoint类来转换,做到了
不受类的束缚,可以自由转换。
下面再介绍一种比较常用的转换方式,如果InputAction中有一个 private List<PointBean> points ;这样的成员
那么,转换类中应考虑循环
package cn.zhao.action.conver; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import cn.zhao.action.PointBean; public class CommonListTypeConverPoint extends StrutsTypeConverter { @Override public Object convertFromString( Map context, String[] values, Class toClass ) { List<PointBean> list = new ArrayList<PointBean>() ; for( String v : values ) { PointBean bean = new PointBean() ; String[] params = v.split( "," ) ; bean.setX( Integer.parseInt( params[ 0 ] ) ) ; bean.setY( Integer.parseInt( params[ 1 ] ) ) ; list.add( bean ) ; } return list ; } @Override public String convertToString( Map context, Object o ) { List<PointBean> list = (List<PointBean>) o ; StringBuilder sb = new StringBuilder() ; sb.append( " [ " ) ; for( PointBean bean : list ) { sb.append( " x= " ) ; sb.append( bean.getX() ) ; sb.append( " y = " ) ; sb.append( bean.getY() ) ; } sb.append( " ] " ) ; return sb.toString() ; } }
相关文章推荐
- Struts2 Chater 4&5 Struts2中的验证输入和数据类型的转换
- struts2的类型转换实例
- 一篇文章搞定Struts2的类型转换
- Struts2的类型转换(1):基于ognl的类型转换
- struts2类型转换
- struts2为什么要类型转换
- Struts2的类型转换
- Struts2的类型自动转换机制
- struts2中类型转换
- Struts2的类型转换
- Struts2对于BigDecimal类型的转换问题
- struts2的类型转换
- Struts2学习7---集合类型的类型转换
- Struts2自定义类型转换
- 【Struts2】1.类型转换和输入校验
- struts2学习之---类型转换
- Struts2中转换Date类型的问题 推荐
- Struts2 系列之(3)类型转换
- Struts2:类型转换之批量封装Set集合类型的属性(二)
- struts2之类型转换