浏览 2359 次
锁定老帖子 主题:struts的自定义类型转换无法成功
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-05-23
package model; public class Test { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } Action package action; import model.Test; import com.opensymphony.xwork2.ActionSupport; public class TestAction extends ActionSupport{ private Test test; public String execute(){ System.out.println("action start"); System.out.println(test); return null; } public Test getTest() { return test; } public void setTest(Test test) { this.test = test; } } 局部的类型转换文件TestAction-conversion.properties test=converter.TestConverter 类型转换器 package converter; import java.util.Map; import model.Test; import org.apache.struts2.util.StrutsTypeConverter; public class TestConverter extends StrutsTypeConverter{ @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) { // TODO Auto-generated method stub System.out.println("convertFromString"); Test test = new Test(); String[] values = arg1[0].split(","); test.setName(values[0]); return test; } @Override public String convertToString(Map arg0, Object arg1) { // TODO Auto-generated method stub return null; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-05-23
话说LZ调用转换器了吗?为啥我米有看到调用的地方勒,并且这个不是类型转换吧……
|
|
返回顶楼 | |
发表时间:2012-05-23
happys 写道 话说LZ调用转换器了吗?为啥我米有看到调用的地方勒,并且这个不是类型转换吧……
类型转换器是不需要手动调用。如果这个不是类型转换器,什么是呢? |
|
返回顶楼 | |
发表时间:2012-05-24
properties文件和action放在同一个包里吗?
|
|
返回顶楼 | |
发表时间:2012-05-24
wsyzx1989 写道 properties文件和action放在同一个包里吗?
放在一个包里了 |
|
返回顶楼 | |
发表时间:2012-05-25
不知道lz是要对test对象进行转换 还是要对test下的name进行转换呢?
如果对test转换 你的请求界面 表单name属性值应该为test 如果 lz是要对test下的name进行类型转换 你action中用的是test对象 所以在你的局部类型转换配置文件中应该这样写: test.name=converter.TestConverter 同时 应该在你的 test类的同级包下 创建一个Test-converstion.properties文件 内容为: name=converter.TestConverter 同时你的类型转换器的实现 也要改变一下了.... |
|
返回顶楼 | |
发表时间:2012-05-26
hxlzpnyist 写道 不知道lz是要对test对象进行转换 还是要对test下的name进行转换呢?
如果对test转换 你的请求界面 表单name属性值应该为test 如果 lz是要对test下的name进行类型转换 你action中用的是test对象 所以在你的局部类型转换配置文件中应该这样写: test.name=converter.TestConverter 同时 应该在你的 test类的同级包下 创建一个Test-converstion.properties文件 内容为: name=converter.TestConverter 同时你的类型转换器的实现 也要改变一下了.... 当我对test下的name进行转换的时候,我发现调用的是convertToString方法,不知道为什么?这样不是得不到请求参数了吗?不知道遗漏了什么步骤?能说说类型转换器的实现怎么改吗? |
|
返回顶楼 | |
发表时间:2012-05-27
soochief 写道 hxlzpnyist 写道 不知道lz是要对test对象进行转换 还是要对test下的name进行转换呢?
如果对test转换 你的请求界面 表单name属性值应该为test 如果 lz是要对test下的name进行类型转换 你action中用的是test对象 所以在你的局部类型转换配置文件中应该这样写: test.name=converter.TestConverter 同时 应该在你的 test类的同级包下 创建一个Test-converstion.properties文件 内容为: name=converter.TestConverter 同时你的类型转换器的实现 也要改变一下了.... 当我对test下的name进行转换的时候,我发现调用的是convertToString方法,不知道为什么?这样不是得不到请求参数了吗?不知道遗漏了什么步骤?能说说类型转换器的实现怎么改吗? 如果是对test下name进行类型转换,按照你当前的action,首页你的提交表单 元素 name属性 应该是test.name struts2会在 action执行set方法之前 检测是否需要对该参数进行类型转换 (通过你的配置文件实现的了) 当检测到需要对其进行类型转换的时候 ,就会执行自定义的类型转换器类了... convertFormString 该方法是将表单传过来的参数 转换为你所需要的对象(这里 也就是你的test下的name了) 具体实现按照你的业务来了 转换操作完成后 将你转换后的对象返回 就行了 ...struts2会将该返回的对象 通过set方法注入到name了 convertToString方法 一般情况下都是用来 在页面显示 某一个对象时 也就是调用action中的get方法 会将其转换为string类型 记住这里的显示 必须采用struts标签<s:property value="test.name">才能够显示 |
|
返回顶楼 | |