注册 登录
编程论坛 J2EE论坛

拜拜拜拜

Ethip 发布于 2008-10-20 19:33, 6800 次点击
拜拜拜拜

[ 本帖最后由 Ethip 于 2013-9-30 14:14 编辑 ]
17 回复
#2
恋轩念伊人2008-10-20 19:45
帮你顶下吧,不会,根本是不懂
#3
Ethip2008-10-20 20:10
回复 2# 恋轩念伊人 的帖子
谢谢,我去JavaEye上也发了的,没人鸟我。哎,还得自己整一段时间了。
#4
恋轩念伊人2008-10-20 20:58
去百度看下吧
#5
流星阿勇2008-10-20 23:31
把你的这个项目给我发一下,我给你看看。。。
#6
Ethip2008-10-21 09:51
我这个项目的源代码,直接导入MyEcplise中即可
#7
huwangvs2008-10-21 12:53
你要转换的是PointBean.
那你在转换的时候返回的应该是个PointBean吧。而不是一个list.
#8
Ethip2008-10-21 15:27
回复 7# huwangvs 的帖子
谢谢!
自定义的转换类要实现两个继承的方法.
当提交表单后,数据交予转换类的方法convertFromString处理,由于转换的属性都是一样的,所以把它们存放在list里面,并结合泛型来处理。

感觉就是,流程在最后没有自动调用方法convertToString,查了下源代码,浏览器中的null值,是抛出的exception,不自在Console怎么没有提示...哎,还是没搞明白呀
#9
huwangvs2008-10-21 16:50
看了下代码。
问题应该是出在这里。
在你提交的时候会调用convertFromString方法,来将字符串转化为bean。你这里的转化应该是错误的。Struts2的转化方式应该是当遇到一个可以转化的字符串就会调用convertFromString来转化为对应的类。在这里应该是将字符串转化为一个PointBean,然后返回一个PointBean,而不需要你再手动的将这个PointBean放到List里面,返回这个List。
后面那个方法没调用是因为你前面报错误了嘛!
我改了一下,显示如下结果
************************
类型转换结果

[org.ethip.sruts2.tutorial.bean.PointBean@191394e, org.ethip.sruts2.tutorial.bean.PointBean@149494e, org.ethip.sruts2.tutorial.bean.PointBean@6bbb36]

***************************
依然没有调用那个convertToString方法,原因应该是他没有显示List里面的内容,所以没有调用。目前对Struts2标签不是太熟,不清楚怎么显示。lz知道麻烦告知

Struts2的优点也许也是缺点,就是封装度太高了,出了错误不容易找到。
#10
huwangvs2008-10-21 17:30
改了一下,能转换了。
就是那个显示的第几个点那个有问题 第一次显示1,2,3,然后第二次就显示4,5,6.
转换都能转了。
#11
Ethip2008-10-21 20:33
回复 10# huwangvs 的帖子
现在我这边的网络不好,等我下载完了你修改的代码后,再仔细回复你啊!
#12
Ethip2008-10-21 22:10
回复 10# huwangvs 的帖子
我看了你修改的代码 ^_^ 觉得这种不是很合适.

客户端输入的所有属性值都是以字符串形式提交的。
而在Struts2中,是把所有的表单输入保存在一个字符串数组中,因为方法convertFromString(Map arg0, String[] values, Class arg2)的参数values就是这样定义的.因此,应该不会对每一个属性单独转换。所以在action中,把所有属性对应的封装类用做List的泛型参数。

另外,org.ethip.sruts2.tutorial.bean.PointBean@191394e形式好像表示的是字符串的地址,听说要重写toString()才可以得到对应的值。

明天再研究啦
#13
huwangvs2008-10-22 10:16
回复 12# Ethip 的帖子
我认为你的理解有误。
我的理解是,Struts2是基于拦截器的,那你在配置文件里面配置了PointBean的转换器类,那么当Struts2拦截到PointBean的时候就会去自动调用拦截器类。
对于这个方法convertFromString(Map arg0, String[] values, Class arg2),你可以debug一下,再看一下api,假如你输入的字符串分别是 1,2     3,4      5,6   
那么这个方法会被调用三次,每次的values值都是这三个值里面的一个。在api里解释的是最后一个参数Class是要转换成的类,你debug看看,那是个PointBean类,而以你的写法,返回的是个list,不对应的。
我在网上好像也看到了你这样的写法,没有实际测过。感觉应该可以,但是原理猜不透 以后看了源码应该能明白
#14
Ethip2008-10-22 11:15
回复 13# huwangvs 的帖子
"Struts2是基于拦截器",这个应该是Struts2的核心,我还没有深入的学习。

哎,还是说说那两个方法。
第一个方法中,我的确是把PointBean对象存在list对象中;
但是,在第二个方法中,要转换的参数其实是一个lsit对象,,所以有强制类型转换成List<PointBean>.这个方法也即是在向客户端转化,我已经把list里面的对象取出来,并且连接成一字符串。

由于result页面显示的那个point属性,对应着PointAction里面的list对象,所以他应该是个list对象,它只显示在一个字符串中,所以不必用<s:itreator />遍历list,前面已经转换成字符串了。

我在网上也找到过类似的例子,但都是用局部的,全局转换的都是我这样类似的错误,用到泛型的话。如果不用泛型,确实可以的。

谢谢你的关注,我吃饭去了 哈哈
#15
恋轩念伊人2008-11-11 17:02
回复 9# 的帖子
SSH就是这样,有同感,优点也是缺点
#16
gyj1291292008-12-14 00:33
全局确实存在着这样的问题,找了好久了也没有人知道为什么?我和楼主的写法一样,效果也是一样的了。继续研究中...
#17
anyiluo132008-12-14 13:59
Struts2 还么接触过,和struts1区别很大吧
#18
Ethip2008-12-15 14:44
回复 第17楼 anyiluo13 的帖子
区别是相当的明显
1