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();
entriesadd(new LabelvalueBean(Label value ));
entriesadd(new LabelvalueBean(Label value ));
entriesadd(new LabelvalueBean(Label value ));
entriesadd(new LabelvalueBean(Label value ));
entriesadd(new LabelvalueBean(Label value ));
entriesadd(new LabelvalueBean(Label value ));
entriesadd(new LabelvalueBean(Label value ));
entriesadd(new LabelvalueBean(Label value ));
entriesadd(new LabelvalueBean(Label value ));
entriesadd(new LabelvalueBean(Label value ));
然后执行setBeanCollection(entries);
这样ActionForm中的beanCollection算有值了
第二小步需要设置Selectedselected有两种单选和多选
在ActionForm中必须有
private String singleSelect = Single ;
public String getSingleSelect()
{
return (thissingleSelect);
}
public void setSingleSelect(String singleSelect)
{
thissingleSelect = singleSelect;
}
或多选多选必须是数组
private String[] beanCollectionSelect = { value value
value };
public String[] getBeanCollectionSelect() {
return (thisbeanCollectionSelect);}
public void setBeanCollectionSelect(String beanCollectionSelect[])
{
thisbeanCollectionSelect = 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 PaperOther };
private String labels[] =
{ LMagazine LJournal LNews PaperLOther};
private String selected = Magazine;
public String getSelected()
{
return selected;
}
public void setSelected(String selected)
{
thisselected = selected;
}
public String[] getvalues()
{
return values;
}
public void setvalues(String[] values)
{thisvalues = values;
}
public String[] getLabels()
{
return values;
}
public void setLabels(String[] labels)
{
thislabels = 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