现在的位置: 首页 > 综合 > 正文

关于webx参数传递的问题

2013年09月14日 ⁄ 综合 ⁄ 共 1418字 ⁄ 字号 评论关闭

在最近的编程时,遇到两个类似的问题。

第一个问题:

1)Setup.java类中,给context中name为“score”的传入一个Double型变量,代码如下:

Double score=1.0;

context.put("score",score);

2)setup.vm中,将score填值后,传给对应的action类,name仍未“score”。

<input type="text" name="score">

页面如下图显示,用户填入了“45%”后点击确定


3)SetupAction.java中:

public void doSetup(

@Param(name = "score") Double score,

TurbineRunData rundata,

Context context, Navigator navigator){

}

在页面中填入“45%”,点击确认,在SetupAction.java中debug时,发现score传入的值为空,这个问题好像很容易理解,因为“45%”没有办法转换成Double型。

再看第二个问题:

1) 在Setup.java中,传入了一个List,代码如下:

List<ResInstanceDTO> resList=res.getModel;

context.put("resList", resList);

2) 在setup.vm中:

<input type="hidden" name=" resList " value=" $!{resList} ">

3) 在SetupAction.java中:

public void doSetup(

@Param(name = " resList ") List<ResInstanceDTO> resList,

TurbineRunData rundata,

Context context, Navigator navigator){

}

Debug类SetupAction.java中发现传入的resList为null。

这时就产生疑问了,为什么传入的是一个带泛型的List,通过.vm页面后,传出来的是空呢??

各种想不通,于是求牛人解答,给我的答案是:

1) 不支持这样传

2) 由于反射机制,传入VM的序列,不能正常反射解析为你要的类型。

听到了高端名词“反射”。答案一定在反射机制中。

JAVA语言中的反射机制:
在Java 运行时 环境中,对于任意一个类,能否知道这个类有哪些属性和方法?
对于任意一个对象,能否调用他的方法?这些答案是肯定的,这种动态获取类的信息,以及动态调用类的方法的功能来源于JAVA的反射。从而使java具有动态语言的特性。

JAVA反射机制主要提供了以下功能:
1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象
3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法)
4.在运行时调用任意一个对象的方法(*****注意:前提都是在运行时,而不是在编译时)

JAVA 反射相关的API简介:
位于java。lang。reflect包中
--Class类:代表一个类
--Filed类:代表类的成员变量
--Method类:代表类的方法
--Constructor类:代表类的构造方法
--Array类:提供了动态创建数组,以及访问数组的元素的静态方法。该类中的所有方法都是静态方法

其实看完上述描述后 ,我仍然不是很理解,第二个问题的原因,求大牛解答!!

后续:

原因是webx解析器,这个说法对吗?待验证。

抱歉!评论已关闭.