修改過程中學習到了<s:select>中用struts2標簽顯示的必須是對象型,即是使用hql查詢出來的List符合。Jsp如下
<s:select style="width:140px;height:20px;" list="jcSbpcList" headerKey="" headerValue="" listKey="sbpc" listValue="sbpc" name="ztbModel.sbpc" theme="simple" ></s:select>
或者使用Sql查詢出來的List進行轉換:
List list = proxyService.getBasicdataService().getCxZndmList();
for(int i=0;i<list.size();i++){
Map map=new HashMap();
Object[] objs = (Object[]) list.get(i);
map.put("zndm", objs[2].toString()+"-"+objs[0].toString());
map.put("znmc", objs[2].toString()+"-"+objs[1].toString());
this.cxZndmList.add(map);
}
但是這種情況如果查詢出來的List就一條數據會報出錯:
java.lang.String cannot be cast to [Ljava.lang.Object;
出錯的原因:Sql語句執行的查詢結果只有一列時就會出現該問題,當有多個列時用數組去沒有問題,如果只有一列會默認為String或者其他類型!
所以最終選擇頁面通過iterator循環來顯示sql查詢出來的List,注在此沒有#
<select id="sbpct" name="ztbModel.sbpc" style="width:140px;height:20px;">
<option></option>
<s:iterator value="jcSbpcList" id="jcSbpcList">
<option value="<s:property value="jcSbpcList[0]"/>"><s:property value="jcSbpcList[0]"/></option>