Struts1.3 Tag总结之----MultiBox

Multibox标签的用法:

<logic:iterate id="hobby" name="tagInfo" property="hobbies">

       <html:multibox property="selectedHobbies">

           <bean:write name="hobby"/>  这里是设置checkboxvalue属性

       </html:multibox>

           <bean:write name="hobby"/>  这里是打印checkbox的文本显示

</logic:iterate>

就是两个数组的嵌套使用。Hobbies数组表示所有可供选择的兴趣爱好,selectedHobbies表示用户已有的兴趣爱好。在 iterate的遍历所有可供选择的外层hobbies循环中,内层selectedHobbies将针对hobbies中的每一个值,遍历自己所有元素,如果它们的value相匹配,就使这个checkbox的状态成为”checked”

Renders an HTML <input> element of type checkbox, whose "checked" status is initialized based on whether the specified value matches one of the elements of the underlying property's array of current values.

 

Id 代表外层hobbies每一个对象,iteratename表示hobbies是指定scope中的一个对象,通过在Action类中request.setAttribute("tagInfo",aTag); 添加。Iterateproperty表示name对象的属性。

 

Multiboxproperty就是ActionForm中与该jsp控件所绑定的instance variable

 

那么现在的情况是checkboxvalue属性(就是如果被选中将被提交的值) checkbox的文本显示是一样的。即最终生成的html页面代码如下:

<input type="checkbox" name="selectedHobbies" value="music" checked="checked"> music

那么怎样使两者区分开,比如说value只是个数字,text则表示代表的意义?这个数据库的设计有关,user表,hobby表还有一个user_hobby表。一个user可以有多个hobby,hobby表只存储hobby信息,user_hobbyuserhobby的映射关系(user_id,hobby_id)

 

我们改变外层数组元素的类型,设它为一个Hobby类,有idname,而内层数组元素由于在数据库中的映射只是一个hobby_id,所以可以改变成int类型。于是可以改成

 

<logic:iterate id="hobby1" name="tagInfo" property="objHobbies">

       <html:multibox property="intSelectHobbies">

           <bean:write name="hobby1" property="id"/>

       </html:multibox>

           <bean:write name="hobby1" property="name"/>

</logic:iterate>

而生成的html代码:

<input type="checkbox" name="intSelectHobbies" value="1" checked="checked">音乐

也做到了真实值和显示值得分离。真实值被传递进Action类进行数据操作,显示值只是作为一个显示而已。

你可能感兴趣的:(html,bean,jsp,音乐)