struts2的类型转换,还算有点意思.这里就说一下吧!
转换器分为两种,一种是局部,一种全局;
1.局部转换器
写一个自己创建的VO类,然后再写个转换类;
转换类需要集成DefaultTypeConverte类,进而实现它的convertValue(Map context, Object value, Class toType)方法;
最后配置properties文件,文件一定要放在action类的同一个包下;
properties文件;
名字:Action的类名-conversion.properties;
内容:属性名=转换器类名,
如:person=Vo.PersonConverter
转换器:
2.全局转发:
与局部转发区别就是xwork-conversion.properties,他放在src的目录外面,配置如下:
POJO.Person=conversion.PersonConverter
bean路径 转换器类名
3.简化转换器:
让转换器继承StrutsTypeConverter类,他是DefaultTypeConverter的子类,将出出进进的两次转换分割开成两个方法,方便了一些,具体如下:
4.设置对象中容器可以对应着多个数据转换:
Action类中private List<Person> person; 进行对他的处理,因此而产生的简便处理;
全局转换配置文件走toString,局部转换配置文件走转换类的输出方法;
原理,通过list进行加载,故此list如果使用泛型,那么list内拥有多少个对象,便进入多少次数据转换类;并
且注意重点,他是有进无处的,,需要在他POJO类中定义它的toString方法;
配置文件不变,:
但是拥有两个变化:
分别是:
5.设置国际化资源文件,改变数据转换错误的信息:
全局配置:
struts.xml:
<constant name="struts.custom.i18n.resources" value="messages" />
//设置国际化资源文本文件:value是资源文本文件的文件名
properties:
xwork.default.invalid.fieldvalue={0}数据类型转换错误
转换器分为两种,一种是局部,一种全局;
1.局部转换器
写一个自己创建的VO类,然后再写个转换类;
转换类需要集成DefaultTypeConverte类,进而实现它的convertValue(Map context, Object value, Class toType)方法;
最后配置properties文件,文件一定要放在action类的同一个包下;
properties文件;
名字:Action的类名-conversion.properties;
内容:属性名=转换器类名,
如:person=Vo.PersonConverter
转换器:
- public class PersonConverter extends DefaultTypeConverter {
- //必须继承DefaultTypeConverter类;
- public Object convertValue(Map context, Object value, Class toType) {
- //toType,目标类型;value,转换成自定义的时候是数组;
- if(toType.equals(Person.class)) {
- String[] vo = (String[]) value;
- String username= vo[0].split(",")[0];
- String password= vo[0].split(",")[1];
- Person person= new Person();
- person.setUsername(username);
- person.setPassword(password);
- return person;
- }else if(toType.equals(String.class)) {
- //此方法只有在,JSP界面中<s:property value="person" />才会调用此方法中的内容;
- 切记;
- Person person= (Person) value;
- return "["+person.getUsername()+","+person.getPassword()+"]";
- }
- return null;
- }
与局部转发区别就是xwork-conversion.properties,他放在src的目录外面,配置如下:
POJO.Person=conversion.PersonConverter
bean路径 转换器类名
3.简化转换器:
让转换器继承StrutsTypeConverter类,他是DefaultTypeConverter的子类,将出出进进的两次转换分割开成两个方法,方便了一些,具体如下:
- public class PersonConverter extends StrutsTypeConverter {
- public Object convertFromString(Map context, String[] vo, Class toType) {
- //表单递交时,运行;
- String username= vo[0].split(",")[0];
- String sex= vo[0].split(",")[1];
- Person person= new Person();
- person.setUsername(username);
- person.setSex(sex);
- System.out.print("-----------");
- return person;
- }
- public String convertToString(Map arg0, Object value) {
- //将值返回表现层的方法;s
- Person person= (Person) value;
- return "["+person.getUsername()+","+person.getSex()+"]";
- }
- }
Action类中private List<Person> person; 进行对他的处理,因此而产生的简便处理;
全局转换配置文件走toString,局部转换配置文件走转换类的输出方法;
原理,通过list进行加载,故此list如果使用泛型,那么list内拥有多少个对象,便进入多少次数据转换类;并
且注意重点,他是有进无处的,,需要在他POJO类中定义它的toString方法;
配置文件不变,:
但是拥有两个变化:
分别是:
- 转换类,
- public class PersonConverter extends StrutsTypeConverter {
- public Object convertFromString(Map arg0, String[] value, Class arg2) {
- String x = value[0].split(",")[0];
- String y = value[0].split(",")[1];
- Person p= new Person();
- p.setX(x);
- p.setY(y);
- return p;
- }
- public String convertToString(Map arg0, Object value) {
- StringBuilder b = new StringBuilder();
- return b.toString();
- }
- }
- POJO:
- public class Person {
- private String x;
- private String y;
- ............
- public String toString() {
- return "x="+getX()+" y="+getY()+"";
- }
全局配置:
struts.xml:
<constant name="struts.custom.i18n.resources" value="messages" />
//设置国际化资源文本文件:value是资源文本文件的文件名
properties:
xwork.default.invalid.fieldvalue={0}数据类型转换错误