html:options是Struts中比較復雜的一個tage lib
用法靈活
但是Sturts提供的源碼exercise taglib中沒有提出常用jsp+ActionForm這樣形式的最直接的總結
現從中總結如下
分兩種情況
數組和Collection
需求
要達到
<select name=
beanCollectionSelect
multiple=
multiple
size=
>
<option value=
value
>Label
</option>
<option value=
value
selected=
selected
>Label
</option>
<option value=
value
>Label
</option>
<option value=
value
selected=
selected
>Label
</option>
<option value=
value
>Label
</option>
<option value=
value
selected=
selected
>Label
</option>
<option value=
value
>Label
</option>
<option value=
value
>Label
</option>
<option value=
value
>Label
</option>
<option value=
value
>Label
</option></select>
要實現上述效果
需要兩步
第一
設置ActionForm
也分兩小步
第一小步必須在ActionForm中
有一句
private Collection beanCollection;
public Collection getBeanCollection();
Collection beanCollection要確保是一個實現
如ArrayList
如果不是則會報No collection found的錯誤
Struts的最大不方便就是一旦出問題
定位很難
不知道什麼地方使用錯誤
或忘記設置什麼了
因為前面需求中option的value值和label值不一樣
那麼在beanCollection中保存的就是一個value和label組成的對象
名為LabelvalueBean
在LabelvalueBean中有兩個屬性value和label
在程序某個地方要為beanCollection賦值
如
Vector entries = new Vector(
);
entries
add(new LabelvalueBean(
Label
value
));
entries
add(new LabelvalueBean(
Label
value
));
entries
add(new LabelvalueBean(
Label
value
));
entries
add(new LabelvalueBean(
Label
value
));
entries
add(new LabelvalueBean(
Label
value
));
entries
add(new LabelvalueBean(
Label
value
));
entries
add(new LabelvalueBean(
Label
value
));
entries
add(new LabelvalueBean(
Label
value
));
entries
add(new LabelvalueBean(
Label
value
));
entries
add(new LabelvalueBean(
Label
value
));
然後執行setBeanCollection(entries);
這樣ActionForm中的beanCollection算有值了
第二小步
需要設置Selected
selected有兩種
單選和多選
在ActionForm中必須有
private String singleSelect =
Single
;
public String getSingleSelect()
{
return (this
singleSelect);
}
public void setSingleSelect(String singleSelect)
{
this
singleSelect = singleSelect;
}
或多選
多選必須是數組
private String[] beanCollectionSelect = {
value
value
value
};
public String[] getBeanCollectionSelect() {
return (this
beanCollectionSelect); }
public void setBeanCollectionSelect(String beanCollectionSelect[])
{
this
beanCollectionSelect = beanCollectionSelect;
}
第二
在Jsp中寫入tang lib語句如下
<html:select property=
beanCollectionSelect
size=
multiple=
true
>
<html:optionsCollection name=
testbean
property=
beanCollection
/>
</html:select>
其中testbean是ActionForm的名稱
以上是html:options的Collection解決方案
如果option值很少
簡單地可以實現為數組
兩步
第一
在ActionForm中
private String values[] =
{
Magazine
Journal
News Paper
Other
};
private String labels[] =
{
L
Magazine
L
Journal
L
News Paper
L
Other
};
private String selected =
Magazine
;
public String getSelected()
{
return selected;
}
public void setSelected(String selected)
{
this
selected = selected;
}
public String[] getvalues()
{
return values;
}
public void setvalues(String[] values)
{ this
values = values;
}
public String[] getLabels()
{
return values;
}
public void setLabels(String[] labels)
{
this
labels = labels;
}
第二步在jsp中
<html:select property=
selected
>
<html:options name=
testbean
property=
values
labelProperty=
label
/> </html:select>
Struts標簽庫的使用還是需要小心
不必完全使用Struts的標簽庫
個人感覺Struts這種替代Html語句的標簽庫有一種牽強附會
給使用者掌握帶來難度
使用者除熟悉html外
還必須理解Struts的對應標簽庫用法
而且這種調試出錯
問題也無法准確定位
總是抽象地告訴你
no bean 或no form
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28412.html