最近在写一个系统中,有一个有下拉列表的修改资料功能,对Struts的html:select进行了运用。
其中怎么样使进入修改页面之后,该下拉列表里的数据是该需要修改的数据列的数据字段,也就是使html:select中显示的值默认对应数据库中的值。测试修改了一个下午,总得不出结果,最后还是看了Struts的examples才算是弄出来了,如:
<html:select property="id"> //这里一定不能再用vlue属性了,只用一个property就可以了
<c:forEach var="row" item="${rs.rows}">
<html:option value="row.id">
<c:out value="row.name"/>
</html:option>
</c:forEach>
</html:select>
总结:在使用Struts进行修改功能时,要在修改页面上取的数据库先前的值。只要在form中reset里取得数据库里的值,然后在前台页面里html:form里对应的项设置其property为form中对应的属性值就好了,而不需要再设置value属性了。
XXAction{
execute() {
request.setAttribute("ids", getNameID());
}
private List getNameID() {
...
ArrayList ls = new ArrayList();
for() {
ls.add(new LabelValueBean(name,id);
}
}
}
jsp
<html:select property="id">
<html:optionsCollection name="ids" />
</html:select>
如果Select的选项固定,可以直接用Selected标签实现默认值(JAVA代码1)
<html:select property="id">
<html:option value="0" selecded>无html:option>
<html:optionsCollection name="ids" />
</html:select>
如果是动态的(JAVA代码2),可以在相对应Action的From中设置默认值(JAVA代码3)
public List getOptions() {
List ls = new ArrayList();
for(;;) {
ls.add(new LabelValueBean(key,value);
}
}
public ActionForward update(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
xxxForm f = (xxxForm)form;
f.setOption(value);
return mapping.findForward("page");
}
如果上面的还不能满足的话,可以试试用JS控制
function Selected(index,valued){
if(index!=""){
var lengths = $("select").options.length;
for(var i=0;i
if(valued == index){
$("select").options[i].selected=true;
}
}
}
}
<html:select property="id"> //这里一定不能再用vlue属性了,只用一个property就可以了
<c:forEach var="row" item="${rs.rows}">
<html:option value="row.id">
<c:out value="row.name"/>
</html:option>
</c:forEach>
</html:select>
<c:forEach var="row" item="${rs.rows}"> ……c:forEach>
<logic:equal name="by" value="desc" scope="session">