您的位置:首页 > 编程语言 > Java开发

Struts2中的类型转换

2009-03-22 16:44 471 查看
局部变量类型转换

我们看下面代码,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() ;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: