【问题标题】:Struts2 TypeConvertor: Forming multiple object into oneStruts2 TypeConvertor:将多个对象合二为一
【发布时间】:2015-01-19 12:21:32
【问题描述】:
我有一个需求,我需要把String转换成double或者long。
我应用@TypeConvertor 的字段有时也可以包含String。
从下面的 sn-p 中可以看出,当我得到一个数字时,isNumber 属性为真。
无论如何我可以将isNumber 传递给Struts2 类型转换器吗?或任何其他解决方法?
Class XYZ{
private boolean isNumber;
private String value;
@TypeConvertor
public void setValue(){
}
}
【问题讨论】:
标签:
java
struts2
annotations
type-conversion
【解决方案1】:
Struts2 隐式执行到已知类型的基本类型转换,double 和long 就是这些类型。因此,您不需要转换器来转换这些类型。但是,如果您需要类型转换器的自定义实现,您可以尝试
动作:
private Double doubleValue;
public Double getDoubleValue() {
return doubleValue;
}
@TypeConversion(converter = "com.struts.conversion.DoubleConverter")
public void setDoubleValue(Double doubleValue) {
this.doubleValue = doubleValue;
}
DoubleConverter.java:
public class DoubleConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
Object o = null;
try {
o = Double.valueOf(values[0]);
} catch (NumberFormatException e){}
return o;
}
@Override
public String convertToString(Map context, Object o) {
return o==null?"":o.toString();
}
}
@TypeConversion 注释是一个类型被转换的属性。我已将其应用于Double 类型的属性,但您可以尝试将转换器应用于XYZ 类型的属性,例如
@TypeConversion(converter = "com.struts.conversion.YourNumberConverter")
public void setValue(XYZ value) {
this.value = value;
}
当调用转换器时,您应该得到所有值作为String[],包括isNumber 和value。