﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我在，所以我能-随笔分类-Java</title><link>http://www.blogjava.net/redish/category/12762.html</link><description>我能，所以我在</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 08:40:11 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 08:40:11 GMT</pubDate><ttl>60</ttl><item><title>Struts 中的　html:options(摘抄)</title><link>http://www.blogjava.net/redish/archive/2006/07/09/57304.html</link><dc:creator>Redish</dc:creator><author>Redish</author><pubDate>Sat, 08 Jul 2006 16:58:00 GMT</pubDate><guid>http://www.blogjava.net/redish/archive/2006/07/09/57304.html</guid><wfw:comment>http://www.blogjava.net/redish/comments/57304.html</wfw:comment><comments>http://www.blogjava.net/redish/archive/2006/07/09/57304.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/redish/comments/commentRss/57304.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/redish/services/trackbacks/57304.html</trackback:ping><description><![CDATA[html:options是Struts中比较复杂的一个tage lib，用法灵活，但是Sturts提供的源码exercise taglib中没有提出常用jsp+ActionForm这样形式的最直接的总结，现从中总结如下，分两种情况：数组和Collection。<br />　　<br />　　需求，要达到：<br />　　&lt;select name="beanCollectionSelect" multiple="multiple" size="10"&gt;<br />　　&lt;option value="value 0"&gt;Label 0&lt;/option&gt;<br />　　&lt;option value="value 1" selected="selected"&gt;Label 1&lt;/option&gt;<br />　　&lt;option value="value 2"&gt;Label 2&lt;/option&gt;<br />　　&lt;option value="value 3" selected="selected"&gt;Label 3&lt;/option&gt;<br />　　&lt;option value="value 4"&gt;Label 4&lt;/option&gt;<br />　　&lt;option value="value 5" selected="selected"&gt;Label 5&lt;/option&gt;<br />　　&lt;option value="value 6"&gt;Label 6&lt;/option&gt;<br />　　&lt;option value="value 7"&gt;Label 7&lt;/option&gt;<br />　　&lt;option value="value 8"&gt;Label 8&lt;/option&gt;<br />　　&lt;option value="value 9"&gt;Label 9&lt;/option&gt;&lt;/select&gt;<br />　　<br />　　要实现上述效果，需要两步：<br />　　第一：设置ActionForm，<br />　　也分两小步：第一小步必须在ActionForm中，有一句<br />　　private Collection beanCollection;<br />　　public Collection getBeanCollection();<br />　　<br />　　Collection beanCollection要确保是一个实现，如ArrayList，如果不是则会报No collection found的错误，Struts的最大不方便就是一旦出问题，定位很难，不知道什么地方使用错误，或忘记设置什么了。<br />　　<br />　　因为前面需求中option的value值和label值不一样，那么在beanCollection中保存的就是一个value和label组成的对象，名为LabelvalueBean，在LabelvalueBean中有两个属性value和label，<br />　　<br />　　在程序某个地方要为beanCollection赋值，如：<br />　　<br />　　Vector entries = new Vector(10);　 <br />　　entries.add(new LabelvalueBean("Label 0", "value 0"));　　　　　<br />　　entries.add(new LabelvalueBean("Label 1", "value 1"));　　　　　<br />　　entries.add(new LabelvalueBean("Label 2", "value 2"));　　　　　<br />　　entries.add(new LabelvalueBean("Label 3", "value 3"));　　　　　<br />　　entries.add(new LabelvalueBean("Label 4", "value 4"));　　　　　　<br />　　entries.add(new LabelvalueBean("Label 5", "value 5"));　　　　　 <br />　　 entries.add(new LabelvalueBean("Label 6", "value 6"));　　　　　　<br />　　entries.add(new LabelvalueBean("Label 7", "value 7"));　　　　　　<br />　　entries.add(new LabelvalueBean("Label 8", "value 8"));　　　　　　<br />　　entries.add(new LabelvalueBean("Label 9", "value 9"));<br />　　<br />　　然后执行setBeanCollection(entries);<br />　　这样ActionForm中的beanCollection算有值了。<br />　　第二小步，需要设置Selected，selected有两种，单选和多选：<br />　　在ActionForm中必须有：<br />　　<br />　　private String singleSelect = "Single 5";　 <br />　　public String getSingleSelect()<br />　　 {<br />　　　　　return (this.singleSelect);<br />　　　　}　 <br />　　public void setSingleSelect(String singleSelect)<br />　　 {<br />　　　　　this.singleSelect = singleSelect;<br />　　　　}<br />　　<br />　　或多选，多选必须是数组：<br />　　<br />　　private String[] beanCollectionSelect = { "value 1", "value 3",<br />　　　　　　　　　　　　　　　　　　　　　　　　　"value 5" };　<br />　　public String[] getBeanCollectionSelect() {<br />　　　 return (this.beanCollectionSelect);　　}<br />　　　　public void setBeanCollectionSelect(String beanCollectionSelect[])<br />　　 {<br />　　　　　　this.beanCollectionSelect = beanCollectionSelect;<br />　　　　}<br />　　<br />　　第二：在Jsp中写入tang lib语句如下：<br />　　<br />　　&lt;html:select property="beanCollectionSelect" size="10" multiple="true"&gt;<br />　　　　　　&lt;html:optionsCollection name="testbean" property="beanCollection"/&gt;　　<br />　　 &lt;/html:select&gt;<br />　　<br />　　其中testbean是ActionForm的名称。<br />　　<br />　　以上是html:options的Collection解决方案，如果option值很少，简单地可以实现为数组，两步：<br />　　第一：在ActionForm中，<br />　　<br />　　private String values[] =<br />　　　　 { "Magazine", "Journal", "News Paper","Other" };　 <br />　　private String labels[] =<br />　　　　 { "L-Magazine", "L-Journal", "L-News Paper","L-Other"};<br />　　　　private String selected = "Magazine";　　<br />　　public String getSelected()<br />　　{<br />　　　　　return selected;<br />　　　　}　　<br />　　public void setSelected(String selected)<br />　　{<br />　　　　　this.selected = selected;<br />　　　　}　 <br />　　public String[] getvalues()<br />　　{<br />　　　　　return values;<br />　　　　}　　<br />　　public void setvalues(String[] values)<br />　　{　　　this.values = values;<br />　　　　}　 <br />　　public String[] getLabels()<br />　　{<br />　　　　　return values;<br />　　　　}　　<br />　　public void setLabels(String[] labels)<br />　　{<br />　　　　　this.labels = labels;<br />　　　　}<br />　　<br />　　第二步在jsp中：<br />　　<br />　　&lt;html:select property="selected" &gt;　　　　　 <br />　　&lt;html:options name="testbean" property="values" labelProperty="label"/&gt;　　　&lt;/html:select&gt;<br />　　<br />　　Struts标签库的使用还是需要小心，不必完全使用Struts的标签库，个人感觉Struts这种替代Html语句的标签库有一种牵强附会，给使用者掌握带来难度，使用者除熟悉html外，还必须理解Struts的对应标签库用法，而且这种调试出错，问题也无法准确定位，总是抽象地告诉你，no bean 或no form <img src ="http://www.blogjava.net/redish/aggbug/57304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/redish/" target="_blank">Redish</a> 2006-07-09 00:58 <a href="http://www.blogjava.net/redish/archive/2006/07/09/57304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>