转换器:可以继承的类:DefaultTypeConverter、StrutsTypeConverter其中后者是常用的,继承于前者的
(1) 普通的类型转换:日期(局部类型转换)
DateAction.java代码如下:
package org.study.test.actions;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class DateAction extends ActionSupport {
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String execute() throws Exception {
System.out.println("-----------"+date+"----------");
return SUCCESS;
}
}
date.jsp中只有一个输入域,输入日期格式的数据
DateAction-conversion.properties
java.util.Date=org.study.test.utils.PointAction
DateConverter.java
package org.study.test.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class PointAction extends StrutsTypeConverter {
private static String DATE_TIME_FOMART_IE = "yyyy-MM-dd HH:mm:ss";
private static String DATE_TIME_FOMART_FF = "yy/MM/dd hh:mm:ss";
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
Date date = null;
String dateString = null;
if (values != null && values.length > 0) {
dateString = values[0];
if (dateString != null) {
// 匹配IE浏览器
SimpleDateFormat format = new SimpleDateFormat(DATE_TIME_FOMART_IE);
try {
date = format.parse(dateString);
} catch (ParseException e) {
date = null;
}
// 匹配Firefox浏览器
if (date == null) {
format = new SimpleDateFormat(DATE_TIME_FOMART_FF);
try {
date = format.parse(dateString);
} catch (ParseException e) {
date = null;
}
}
}
}
return date;
}
@Override
public String convertToString(Map context, Object o) {
// 格式化为date格式的字符串
Date date = (Date) o;
SimpleDateFormat sdf = new SimpleDateFormat(DATE_TIME_FOMART_FF);
String dateTimeString = sdf.format(date);
return dateTimeString;
}
}
其中action和actionNames-converter.properties应该在一个目录下
List类型转换:
RegAction.java
package org.study.test.actions;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
public class RegAction extends ActionSupport {
private List<String> username;
public List<String> getUsername() {
return username;
}
public void setUsername(List<String> username) {
this.username = username;
}
@Override
public String execute() throws Exception {
for (String s : username) {
System.out.println(s);
}
return SUCCESS;
}
}
reg.jsp
<s:form action="reg" method="post" >
<s:textfield name="username" label="username"></s:textfield>
<s:textfield name="username" label="username1"></s:textfield>
<s:submit></s:submit>
</s:form>
RegAction-conversion.properties
Element_username = java.lang.String; 其中Element_username 前面是固定的,后面是action中的属性名
注意:此处因为是基本类型的集合数据,所以无需转换器类
Map类型转换
需要注意的是:
(1)指定key类型: Key_ Map类型的属性的属性名=key类型的全限定类名
(2)指定value类型: Element_ Map类型的属性的属性名=value类型的全限定类名
(1) 普通的类型转换:日期(局部类型转换)
DateAction.java代码如下:
package org.study.test.actions;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class DateAction extends ActionSupport {
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String execute() throws Exception {
System.out.println("-----------"+date+"----------");
return SUCCESS;
}
}
date.jsp中只有一个输入域,输入日期格式的数据
DateAction-conversion.properties
java.util.Date=org.study.test.utils.PointAction
DateConverter.java
package org.study.test.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class PointAction extends StrutsTypeConverter {
private static String DATE_TIME_FOMART_IE = "yyyy-MM-dd HH:mm:ss";
private static String DATE_TIME_FOMART_FF = "yy/MM/dd hh:mm:ss";
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
Date date = null;
String dateString = null;
if (values != null && values.length > 0) {
dateString = values[0];
if (dateString != null) {
// 匹配IE浏览器
SimpleDateFormat format = new SimpleDateFormat(DATE_TIME_FOMART_IE);
try {
date = format.parse(dateString);
} catch (ParseException e) {
date = null;
}
// 匹配Firefox浏览器
if (date == null) {
format = new SimpleDateFormat(DATE_TIME_FOMART_FF);
try {
date = format.parse(dateString);
} catch (ParseException e) {
date = null;
}
}
}
}
return date;
}
@Override
public String convertToString(Map context, Object o) {
// 格式化为date格式的字符串
Date date = (Date) o;
SimpleDateFormat sdf = new SimpleDateFormat(DATE_TIME_FOMART_FF);
String dateTimeString = sdf.format(date);
return dateTimeString;
}
}
其中action和actionNames-converter.properties应该在一个目录下
List类型转换:
RegAction.java
package org.study.test.actions;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
public class RegAction extends ActionSupport {
private List<String> username;
public List<String> getUsername() {
return username;
}
public void setUsername(List<String> username) {
this.username = username;
}
@Override
public String execute() throws Exception {
for (String s : username) {
System.out.println(s);
}
return SUCCESS;
}
}
reg.jsp
<s:form action="reg" method="post" >
<s:textfield name="username" label="username"></s:textfield>
<s:textfield name="username" label="username1"></s:textfield>
<s:submit></s:submit>
</s:form>
RegAction-conversion.properties
Element_username = java.lang.String; 其中Element_username 前面是固定的,后面是action中的属性名
注意:此处因为是基本类型的集合数据,所以无需转换器类
Map类型转换
需要注意的是:
(1)指定key类型: Key_ Map类型的属性的属性名=key类型的全限定类名
(2)指定value类型: Element_ Map类型的属性的属性名=value类型的全限定类名