当前位置: 代码迷 >> Java Web开发 >> 拜拜拜拜
  详细解决方案

拜拜拜拜

热度:157   发布时间:2008-10-21 20:33:48.0
回复 10# huwangvs 的帖子
现在我这边的网络不好,等我下载完了你修改的代码后,再仔细回复你啊!
----------------解决方案--------------------------------------------------------
回复 10# huwangvs 的帖子
我看了你修改的代码 ^_^ 觉得这种不是很合适.

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

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

明天再研究啦
----------------解决方案--------------------------------------------------------
回复 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,不对应的。
我在网上好像也看到了你这样的写法,没有实际测过。感觉应该可以,但是原理猜不透 以后看了源码应该能明白
----------------解决方案--------------------------------------------------------
回复 13# huwangvs 的帖子
"Struts2是基于拦截器",这个应该是Struts2的核心,我还没有深入的学习。

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

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

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

谢谢你的关注,我吃饭去了 哈哈
----------------解决方案--------------------------------------------------------
回复 9# 的帖子
SSH就是这样,有同感,优点也是缺点
----------------解决方案--------------------------------------------------------
全局确实存在着这样的问题,找了好久了也没有人知道为什么?我和楼主的写法一样,效果也是一样的了。继续研究中...
----------------解决方案--------------------------------------------------------
Struts2 还么接触过,和struts1区别很大吧
----------------解决方案--------------------------------------------------------
回复 第17楼 anyiluo13 的帖子
区别是相当的明显
----------------解决方案--------------------------------------------------------
  相关解决方案