Struts2中类型转换可以将String类型的参数转换为具体的对象类型,比如将字符串形式的日期转换为Date类型。下面是struts2中类型转换的实例代码:
1. 实现TypeConverter接口
public class DateConverter implements TypeConverter {
@Override
public Object convertValue(Map context, Object value, Class toType) {
if (value == null || "".equals(value.toString().trim())) {
return null;
}
if (toType == Date.class) {
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
date = sdf.parse((String) value);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
return null;
}
}
2. 在Struts配置文件中注册转换器
<bean type="com.xxx.DateConverter" name="dateConverter"></bean>
<constant name="struts.conversion.properties.file" value="classpath:converter.properties" />
<constant name="struts.conversion.date" value="dateConverter" />
在converter.properties配置文件中,添加转换器的类型和名称的映射关系:
java.util.Date=com.xxx.DateConverter
3. 在Action中使用类型转换器
public class UserAction extends ActionSupport {
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String execute() throws Exception {
System.out.println(birthday);
return SUCCESS;
}
}
当页面提交参数birthday时,Struts2会自动调用类型转换器完成参数转换,然后将转换后的参数值设置到Action中的对应属性中。
示例:
- 将字符串形式的日期转换为Date类型:
在JSP页面中,定义一个文本框用于输入日期,在Action中定义一个Date类型的属性,然后可以直接在Action中获取到转换后的日期:
<s:textfield name="birthday" />
public class UserAction extends ActionSupport {
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String execute() throws Exception {
System.out.println(birthday);
return SUCCESS;
}
}
- 将字符串形式的照片转换为byte[]类型:
在JSP页面中,定义一个文件上传框用于上传照片,在Action中定义一个byte[]类型的属性,然后可以在类型转换器中完成照片的转换:
<s:file name="photoFile" />
public class UserAction extends ActionSupport {
private byte[] photo;
public byte[] getPhoto() {
return photo;
}
public void setPhoto(byte[] photo) {
this.photo = photo;
}
@Override
public String execute() throws Exception {
System.out.println(photo);
return SUCCESS;
}
}
public class ByteArrConverter implements TypeConverter {
@Override
public Object convertValue(Map context, Object value, Class toType) {
if (value == null || "".equals(value.toString().trim())) {
return null;
}
if (toType == byte[].class) {
File file = (File)value;
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
try {
fis = new FileInputStream(file);
bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = fis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
return bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (bos != null) {
bos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
<bean type="com.xxx.ByteArrConverter" name="byteArrConverter"></bean>
<constant name="struts.conversion.properties.file" value="classpath:converter.properties" />
<constant name="struts.conversion.byte[]" value="byteArrConverter" />
在converter.properties配置文件中,添加转换器的类型和名称的映射关系:
byte[]=com.xxx.ByteArrConverter
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:struts2中类型转换实例代码 - Python技术站