在page类里下面的定义:
<property name="basicInfo"/>
<component id="device_aix_basicInfo_name" type="Foreach"> <binding name="source" value="ognl:getInfo('1001')"/> <binding name="value" value="basicInfo"/> <binding name="element" value="literal:tr"/> </component>
<component id="basicInfo_name" type="Insert"> <binding name="value" value="basicInfo.name"/> </component>
目的是利用foreach循环出表格,name 是javabean:Attribute类的 属性
public class Attribute {
private String name;
//setter and getter
......
}
现在的问题,我这里有个需求,要显示一个表格,而表格中的字段是 事先不知道的,也就是说 不能通过
<binding name="value" value="basicInfo.name"/> 这样写法来获得,因为我不知道 这个list 所包含的javabean里的属性是什么,这个.page没法写 我记得有个index参数
能否利用下?这样写
<component id="basicInfo_name" type="Insert"> <binding name="value" value="ognl:basicInfo[index]"/>(这里好象不对,我查书上还没找到) </component>
主要的问题是,现在的需求是 不能事先知道javabean里的属性名称,因此不能在.page里 写insert组件的value
出现这样的情况呀?确实比较奇特。等于是,你的业务层只是返回一个对象集合,至于是什么对象,你都不知道?你们的业务层设计怎么有这种事情哦。如果你连对象是什么都不知道,你又怎么知道这个对象里面有些什么属性,或者存储了什么状态呢?难道要表现层通过反射自己去或取对象属性?这不是脱了裤子放屁屁嘛,因为具体什么对象,业务层是非常清楚的呀。何必还要表现层这边重新处理。
我猜测的话,或许你们设备有多张表,每个表一个对象,而你现在要统一查出所有设备,因此你不知道具体会返回哪一个设备对象。
其实这种情况的正确处理方式,应该是有业务层返回一个统一的VO对象。不管这个对象的数据是从哪个数据库表结构中取出来的,统一在业务层重新包装一遍。通过这种统一的VO对象,可以让表现层这边减轻很多负担,并且让更多的业务逻辑归属在表现层。
如果你实在要在表现层做的话,那么就只有在java类里面,获取业务层数据以后,自己包装一个统一的VO来处理。