自定义类型转换器

TypeConverter接口

struts2内建的类型转换器并不能解决所有的问题,那就需要自己创建类型转换器。

自定义的类型转换器必须实现ognl.TypeConverter接口或对这个接口的某种具体实现做进一步扩展。


自定义类型转换器_第1张图片

TypeConverter接口只有一个名为convertValue的方法,它的方法签名如下:

public Object convertValue(Map<String, Object> context, Object target, Member member, String propertyName, Object value, Class toType);

参数:

context:将在其中进行类型转换的OGNL上下文环境。

target:将在其中对有关属性进行设置的目标对象。

member:将被设置的类成员的名字。

propertyName:将被设置的属性的名字。

value:将被转换的值。

toType:转换结果的类型。

DefaultTypeConverter

与自行实现TypeConverter接口相比,对该类扩展更容易一些,他是对TypeConverter金额接口的一种默认实现类,且他有简单的方法签名。

    public Object convertValue(Map<String, Object> context, Object value, Class toType) {
        return convertValue(value, toType);
    }

    public Object convertValue(Map<String, Object> context, Object target, Member member,
            String propertyName, Object value, Class toType) {
        return convertValue(context, value, toType);
    }



自定义类型转换器的配置

在使用一个自定义的类型转换器之前,必须先对它进行配置。这种配置可以基于字段,也可以基于类

基于字段:(也可配置成全局,xwork-conversion.properties

在动作类所在的包中创建ActionClass-conversion.properties的文件,其中的内容可能为下所示:

fieldname=customConverter1

基于类:

WEB-INF/classes子目录下创建一个conversion.properties文件,其中的内容可能为下所示:

1.创建属性文件,全局的,在src下面,在action封转数据碰到Adress类型就调用转换器。

xwork-conversion.properties

内容:com.hstc.model.Adress=com.hstc.ognl.adressConverter

1.编写处理类

public class adressConverter extends StrutsTypeConverter{

	//输入
	@Override
	public Object convertFromString(
Map arg0, String[] arg1, Class arg2) {
		// TODO Auto-generated method stub
		if(arg1!=null || arg1.length>0){
			String[] str = arg1[0].split("-");
			Adress a = new Adress();
			a.setJiehao(str[0]);
			a.setPaihao(str[1]);
			return a;
		}
		return null;
	}

	//输出
	@Override
	public String convertToString(Map arg0, Object arg1) {
		// TODO Auto-generated method stub
		String str = "";
		if(arg1 instanceof Adress){
			str = arg1.toString();
		}
		return str;
	}
}



3.view的使用

<!-- 自定义转换器输入 -->
<s:textfield name="address" label="address"></s:textfield>

<!-- 自定义转换器输出 -->
<s:property value="address"/>



4.model

public class Adress {
	
	private String jiehao;
	private String paihao;
	public String getJiehao() {
		return jiehao;
	}
	public void setJiehao(String jiehao) {
		this.jiehao = jiehao;
	}
	public String getPaihao() {
		return paihao;
	}
	public void setPaihao(String paihao) {
		this.paihao = paihao;
	}
	public String toString(){
		return jiehao + paihao;
		
	}
}



你可能感兴趣的:(自定义类型转换器)