该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-27
Multibox标签的用法: <logic:iterate id="hobby" name="tagInfo" property="hobbies"> <html:multibox property="selectedHobbies"> <bean:write name="hobby"/> 这里是设置checkbox的value属性 </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
Id 代表外层hobbies每一个对象,iterate的name表示hobbies是指定scope中的一个对象,通过在Action类中request.setAttribute("tagInfo",aTag); 添加。Iterate的property表示name对象的属性。
Multibox的property就是ActionForm中与该jsp控件所绑定的instance variable。
那么现在的情况是checkbox的value属性(就是如果被选中将被提交的值) 和 checkbox的文本显示是一样的。即最终生成的html页面代码如下: <input type="checkbox" name="selectedHobbies" value="music" checked="checked"> music 那么怎样使两者区分开,比如说value只是个数字,text则表示代表的意义?这个数据库的设计有关,user表,hobby表还有一个user_hobby表。一个user可以有多个hobby,hobby表只存储hobby信息,user_hobby有user到hobby的映射关系(user_id,hobby_id)。
我们改变外层数组元素的类型,设它为一个Hobby类,有id和name,而内层数组元素由于在数据库中的映射只是一个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类进行数据操作,显示值只是作为一个显示而已。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2247 次