最近在寫一個系統中,有一個有下拉列表的修改資料功能,對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()   {   

 //load from db    ...   

 //make a LabelValueBean List   

 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) {    
    //do some thing         
    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">