1.使用DefaultTypeConverter进行转换
需要手动创建DefaultTypeConverter的子类
package com.action;
import java.util.Map;
import com.bean.Person;
import ognl.DefaultTypeConverter;
public class UserConverter extends DefaultTypeConverter {
@SuppressWarnings("unchecked")
@Override
public Object convertValue(Map context, Object value, Class toType) {
if(toType.equals(Person.class)) {
String personStr = ((String[])value)[0];
String[] personArr = personStr.split(",");
Person person = new Person();
person.setName(personArr[0]);
try{
person.setAge(Integer.parseInt(personArr[1]));
}catch (Exception e) {
person.setAge(0);
}
return person;
}else if(toType.equals(String.class)) {
Person person = (Person) value;
return "<" + person.getName() + "," + person.getAge() + ">";
}
return null;
}
}
其中,是自定义类转换为字符串还是字符串转换为自定义类,需要根据toType的类型进行判断。
toType.getClass().equals(String.class)时就是将自定义对象转换为字符串。
需要注意的是,如果是字符串转换为对象的话 ,
value是一个字符串数组,原因是url传值时可以传递多个相同名称的参数。
如果是转换单一对象,那么真正传递过来的字符串是数组的第0个下标。
而对应的从自定义类型向字符串转换的应用场合是在jsp中直接输出自定义类型,这时相当调用了
类的toString()方法,即会将自定义类型转换为字符串。
2.使用StrutsTypeConverter抽象类
代码如下:
package com.action;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.bean.Person;
public class MyStrutsTypeConverter extends StrutsTypeConverter {
@SuppressWarnings("unchecked")
@Override
public Object convertFromString(Map arg0, String[] strs, Class arg2) {
String str = strs[0];
String[] personStrs = str.split(",");
Person person = new Person();
person.setName(personStrs[0]);
person.setAge(Integer.parseInt(personStrs[1]));
return person;
}
@SuppressWarnings("unchecked")
@Override
public String convertToString(Map arg0, Object obj) {
Person p = (Person)obj;
String str = "<" + p.getName() + "," + p.getAge() + ">";
return str;
}
}
需要实现其中的两个方法
convertFromString和convertToString
这两个方法明确代表了是从对象转换为字符串和从字符串转换为对象。从而避免了使用toType进行判断的麻烦。
上面两种方法最终还要搭配一个properties文件才能发挥作用。
就是你应用类型转换的Action-conversion.properties文件。
例如,在ConvertAction中应用了类型转换,则需要在
相同路径下,构建ConvertAction-conversion.properties文件。
在该文件中写入键值对。
person=com.action.MyStrutsTypeConverter
即指明该Action中对应的字段使用何种类型转换器。
如果相对应用中所有的Action都应用该转换器的话,需要在src目录下,新建文件
xwork-conversion.properties文件,在该文件中声明什么类型应用什么转换器。
即
com.bean.Person = com.action.MyStrutsTypeConverter
多个转换器的话就写多个这样的键值对即可。
在类型转换的过程中可能会出现错误,那么如果出现了错误,错误会返回input视图,所以我们指定input视图所
对应的页面即可。
配置了该视图后使用<s:fielderror />将会输出下面的一段话
Invalid field value for field "person".
其中person就是相应的转换错误的字段。
如果想要改变该显示方式,需要在国际化资源文件中使用xwork.dafault.invalid.fieldvalue={0}xxxxxxx
即可,其中xxxxxxx就是转换失败后显示的信息,而{0}则是可以传递进去转换失败的字段。
若要对特定的属性进行特殊的提示的话,可以在Action类名。properties文件中指定要转换的字段进行什么提示
如ConvertAction.properties文件中。添加一行为
invalid.fieldvalue.person=\u8bf7\u6b63\u786e\u586b\u5199\u4fe1\u606f
其中person为相应转换出现错误的字段。
牢记这两个字段值,但是不太现实,太长,也不好记,记记试试吧。
1.xwork.default.invalid.fieldvalue
2.invalid.fieldvalue.xxx
分享到:
相关推荐
Struts2是一个流行的Java web开发框架,其核心是Action,而类型转换是Struts2处理用户输入数据的一个重要环节。Struts2内置了多种类型转换,可以将HTTP请求中的字符串数据转换为各种基本类型和复杂类型,如日期、...
本篇文章将深入探讨Struts2中的类型转换机制。 1. **类型转换的概念** 类型转换是指将一个数据类型的值转换为另一个数据类型的过程。在网络请求中,用户输入的数据通常是字符串类型,而服务器端的Action类属性可能...
在Struts2中,类型转换器(Type Converter)是框架的一个关键特性,用于处理Action类中属性的自动类型转换。这个特性使得开发者无需手动进行数据类型之间的转换,从而提高了开发效率和代码的可读性。 标题中的...
Struts2是一个强大的MVC框架,它在处理Web应用程序时提供了许多便利,其中包括类型转换功能。类型转换是将用户输入的数据自动转化为服务器端处理所需的类型,这样可以避免手动转换带来的繁琐工作。本篇文章将深入...
这篇博文深入探讨了Struts2类型转换的细节,以下是对这一主题的详细解读。 1. **Struts2类型转换的原理** 在Struts2中,类型转换是通过`ValueStack`和`TypeConverter`接口实现的。`ValueStack`负责管理Action对象...
### Struts2类型转换与验证流程详解 #### Struts2框架概述 Struts2是一个用于构建企业级Java Web应用的强大框架。它集成了MVC设计模式,并提供了丰富的插件支持和灵活的配置选项。在Struts2中,类型转换和验证机制...
在Struts2中,类型转换和国际化是两个重要的特性,用于处理数据类型之间的转换以及多语言环境下的内容显示。 **类型转换**是Struts2处理请求参数与Action类属性之间数据类型不匹配的过程。当用户通过表单提交请求时...
struts2类型转换机制
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括类型转换、拦截器和校验机制。本文将深入探讨这些关键知识点,并通过实际例子来帮助你理解它们的工作原理和应用。 首先,我们来看看**类型转换...
在这个"struts2简单实例(类型转换)"中,我们将探讨Struts2如何处理不同类型的数据转换,以及如何创建一个简单的演示应用。 首先,让我们理解什么是类型转换。在Web应用程序中,用户通过表单提交的数据通常是字符...
《STRUTS2类型转换错误导致OGNL表达式注入漏洞分析》 STRUTS2框架在处理用户输入时出现的类型转换错误,可能导致OGNL(Object-Graph Navigation Language)表达式注入漏洞。此漏洞允许攻击者通过精心构造的输入,...
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换
熟悉和掌握Struts2自定义类型转换。 熟悉和掌握Struts2内建校验的操作方法 实验环境与设备: 已经接入局域网的网络实验室,机器上装有IE浏览器等; strtus2.5.8 实验内容: (1) 编写一个...
在Struts2中,类型转换和数据校验是两个关键的特性,它们确保了用户输入的数据能够准确无误地被处理和验证,从而提高了应用的安全性和可靠性。 **类型转换(Type Conversion)** 在Struts2中,类型转换是自动进行...
Struts2是一个强大的MVC框架,它在处理用户请求时提供了丰富的功能,其中包括类型转换(Converter)。类型转换是Struts2框架中一个重要的特性,它允许我们把前端表单提交的数据自动转换为后端Java对象的属性。在这个...
在Struts2中,类型转换是一项关键功能,它允许框架将用户输入的数据自动转换为应用程序需要的特定数据类型。这篇博客文章可能是关于Struts2内部的类型转换机制及其使用的探讨。 在Struts2中,类型转换是通过`...