论坛首页 Java版 Struts

请教:Struts 2.0的Action中,如何自动组装enum类型的参数?

浏览 1650 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-07-03
quaff 写道
ray_linn 写道
quaff 写道
ray_linn 写道
用个convertor就可以了.

是converter不是convertor
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter里面已经有了,这种通用的转化器没必要自己写.



converter和convertor在英文里是完全一样的好不好?

又来挖坟了
就算converter不是一个单词,xwork叫这个就是这个
就像http header的referer是referrer拼写错误一样


这位兄弟,既然来了,能否详细说下兄弟的解决方法啊?
   
0 请登录后投票
最后更新时间:2008-07-03
quaff 写道
ray_linn 写道
quaff 写道
ray_linn 写道
用个convertor就可以了.

是converter不是convertor
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter里面已经有了,这种通用的转化器没必要自己写.



converter和convertor在英文里是完全一样的好不好?

又来挖坟了
就算converter不是一个单词,xwork叫这个就是这个
就像http header的referer是referrer拼写错误一样



不要掩饰英文不好的事实。我原话说的是“用convertor",而不是“用convertor" .


to:LZ

Enum是很特殊的,不能用
java.lang.Enum=.....来转换所有的,要每个Enum单独列出
package.enum=....
   
0 请登录后投票
最后更新时间:2008-07-03
TrueColor 写道
quaff 写道
ray_linn 写道
quaff 写道
ray_linn 写道
用个convertor就可以了.

是converter不是convertor
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter里面已经有了,这种通用的转化器没必要自己写.



converter和convertor在英文里是完全一样的好不好?

又来挖坟了
就算converter不是一个单词,xwork叫这个就是这个
就像http header的referer是referrer拼写错误一样


这位兄弟,既然来了,能否详细说下兄弟的解决方法啊?

不知道你用的什么版本xwork,高版本的xwork是内置了Enum转化的,不需要什么解决方法
   
0 请登录后投票
最后更新时间:2008-07-03
TrueColor 写道
quaff 写道
ray_linn 写道
用个convertor就可以了.

是converter不是convertor
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter里面已经有了,这种通用的转化器没必要自己写.


我的struts是2.0.11版本,xwork 是 2.0.4版本,
发现xwork里是有个 com.opensymphony.xwork2.util.EnumTypeConverter

我在我的WEB-INF/classes/下建立了一个文件 xwork-conversion.properties
内容如下:
java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter

接着,我写了个测试的action, userTest, 在IE中调用:

http://localhost:8080/userTest.action?user.name=XXX&user.sex=MALE

发现action中的user只会得到name的属性值,sex属性值还是不能设置进去。

但是,至少不会出错,会得到一个User对象实例了。

如果,URL中,user.sex的值随便写(不再枚举类Sex的值范围内),如okXXX,
http://localhost:8080/userTest.action?user.name=XXX&user.sex=okXXX
这样调用,会出错,根本得不到一个User的对象实例,

看来,是有点接近我要的结果了。


请问,还有什么地方要做工作吗?


谢谢!!


xwork的版本估计还不够高,新版本的内置的Enum不是以EnumTypeConverter形式的,是直接在com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter里面硬编码的,也就是说你可以把Enum当成Integer这样的类型一样根本不需要什么特殊处理.
   
0 请登录后投票
最后更新时间:2008-07-03
ray_linn 写道
quaff 写道
ray_linn 写道
quaff 写道
ray_linn 写道
用个convertor就可以了.

是converter不是convertor
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter里面已经有了,这种通用的转化器没必要自己写.



converter和convertor在英文里是完全一样的好不好?

又来挖坟了
就算converter不是一个单词,xwork叫这个就是这个
就像http header的referer是referrer拼写错误一样



不要掩饰英文不好的事实。我原话说的是“用convertor",而不是“用convertor" .


to:LZ

Enum是很特殊的,不能用
java.lang.Enum=.....来转换所有的,要每个Enum单独列出
package.enum=....

不懂就不要误导别人
   
0 请登录后投票
最后更新时间:2008-07-03
多谢二位兄弟,

我都试试,

等下来汇报结果。。
   
0 请登录后投票
最后更新时间:2008-07-03
TrueColor 写道

多谢二位兄弟,

我都试试,

等下来汇报结果。。

把xwork升级到最新版本就行了,如果升级带来其他问题可以继续在这个帖子跟贴,我帮你解决.
   
0 请登录后投票
最后更新时间:2008-07-03
quaff 写道
不懂就不要误导别人


你不懂就闭嘴。

写上

<package>.Sex=com.opensymphony.xwork2.util.EnumTypeConverter

key为Sex的name如:MALE,FEMALE.
   
0 请登录后投票
最后更新时间:2008-07-03
忘了一件事了。不知是否和我的enum类的代码是否有关,这是我的Sex代码,

public enum Sex {
MALE, FEMALE, UNKNOWN;
public String getValue() {
return this.toString();
}
}
   
0 请登录后投票
最后更新时间:2008-07-03
ray_linn 写道
quaff 写道
ray_linn 写道
quaff 写道
ray_linn 写道
用个convertor就可以了.

是converter不是convertor
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter里面已经有了,这种通用的转化器没必要自己写.



converter和convertor在英文里是完全一样的好不好?

又来挖坟了
就算converter不是一个单词,xwork叫这个就是这个
就像http header的referer是referrer拼写错误一样



不要掩饰英文不好的事实。我原话说的是“用convertor",而不是“用convertor" .


to:LZ

Enum是很特殊的,不能用
java.lang.Enum=.....来转换所有的,要每个Enum单独列出
package.enum=....


兄弟,我试了,
在xwork-conversion.properties中这样写:

com.mypackage.constant.Sex=com.opensymphony.xwork2.util.EnumTypeConverter

页面上的action?user.sex=MALE,还是设置不到action中的User 对象中....
   
0 请登录后投票
论坛首页 Java版 Struts

跳转论坛:
JavaEye推荐