struts标签库里的html:multibox的使用问题
在页面中加了一个<html:multibox property=“matid“>的标签,总是报错,“参数类型不匹配”,matid是个arraylist类型,在form中及action中都是这个类型,而且,页面的前端显示也没有问题。不知道哪里出了问题。后来看了些资料,好像multibox中只能放String[]类型的参数。于是将matid改为 String类型,不再报错。
有一个问题不能理解:为什么在页面显示时可以使用arraylist类型的参数,而提交却总是报错呢?奇怪!
以下为引用其它:
如果这个复选框没有被选中,浏览器不会为这个控件提交一个值。相反假如被选中,那这个控件的name和他的value将被提交。这种行为就是在ActionForm里有reset()方法的原因。因为浏览器从来不会标记下那些复选框没有被选定,reset所有的boxes的仅有的解决办法就是在request里面检查那些boxes是否存在。
multibox控件被设计成使用一个String的数组。其中的每个元素代表一个checked box。为了检查一个box,添加一个String型的box的值到这个数组中去,对那些没有选中的box,删掉数据中元素。
当传递一个值时,multibox控件扫描数组中的元素看是否匹配。如果匹配的话,那box就是被选中的,否则,box没有被选中。假如用户选中box然后提交了所在的form,这个box的值就会被包括进request中。控件就会添加这个box 到被选中的数组里。假如没有东西被选中,也将没有东西被提交,也没有东西会被加到选中的数组里。假如ActionForm bean仍然保持 session contezt,那在两个request件,reset()方法需要将选中数组的长度置为0(但是这个数组本身不为null)
例子
<logic:iterate id="item" property="items">
<html:multibox property="selectedItems">
<bean:write name="item"/>
</html:multibox>
<bean:write name="item"/>
</logic:iterate>
每个checkbox的labels就是他的property的值,被选中了的Items的列表是在一个名为selectedItems的数组里。不被选中的Items将不回出现在数组selectedItems里。multiox为当前的item,检查selectedItems数组,如果他出现在selectedItems中,写入一个被选定了的checkbox ,假如不是这样,他就写一个未被选定的 checkox。
String[] s=new String[];