java web 下拉列表聯動的實現
阿新 • • 發佈:2019-01-28
很多時候在介面佈局時我們會用到下拉列表,單獨的一個列表與資料庫的互動很簡單
<select>
<option value="">--請選擇--</option>
<c:forEach items="${systemList}" var="st" >
<option value="${st.systemKey}"> ${st.systemName} </option>
</c:forEach>
</select>
其中systeList 是從後臺傳過來的資料
在web層的控制類中
List<copysystem> systemList = ProService.getSystemList();
model.addAttribute("systemList", systemList);
其中ProService 是 service 層的介面IProService 的
因為在service層沒有什麼操作,所以service層只是個過渡,過渡到Dao層
Dao層就是對資料庫進行連線和查詢,查詢資料。
public List<copysystem> getSystemList() { StringBuffer sql = new StringBuffer(""); sql.append("SELECT systemKey,systemName FROM xl_system"); return query(sql.toString(), new SystemrowMapper()); } public class SystemrowMapper implements ParameterizedRowMapper<copysystem>{ @Override public copysystem mapRow(ResultSet rs, int rowNum) throws SQLException { copysystem sys = new copysystem(); sys.setSystemKey(rs.getString("systemKey")); sys.setSystemName(rs.getString("systemName")); return sys; } }
今天要記錄的是當有多個下拉列表聯動時,該怎樣獲取資料,即選擇第一個下拉列表的值,動態的改變第二個下拉列表乃至更多列表的值。
那麼 第一個下拉列表
第二個下拉列表<select id="search_systemKey" onchange="getmodule()" name="search_systemKey" class="input-medium"> <option value="">--請選擇--</option> <c:forEach items="${systemList}" var="st" > <option value="${st.systemKey}"> ${st.systemName} </option> </c:forEach> </select>
<select id="search_moduleKey" name="search_moduleKey" class="input-medium">
<option value="">--請選擇--</option>
</select>
其中
onchange 在元素值改變時觸發。
onchange 屬性適用於:<input>、<textarea> 以及 <select> 元素。
所以當元素值改變時,觸發onchange事件,呼叫getmodule方法<script type="text/javascript">
function getmodule() {
var systemKey=$("#search_systemKey").val(); //獲得第一個列表元素的主鍵
var obj=document.getElementById("search_moduleKey");//回去id為。。的html元素
$.ajax({
type : 'GET',
contentType : 'application/json',
url : '/xiaolian/product/getmodule?systemKey='+systemKey, //呼叫後臺控制類的方法
dataType : 'json',
success : function(data) {
obj.options.length=0;
$.each(data.moduleList,function(i,item) {
obj.options.add(new Option(item.moduleName,item.moduleKey));
});
}
});
}
</script>
AJAX 最大的優點是在不重新載入整個頁面的情況下,可以與伺服器交換資料並更新部分網頁內容。
後面會看看大神關於AJAX的部落格,然後複製過來
發現忘了寫一個重要的方法,就是getmodel()
我們在web層寫這個方法
public Map<String, Object> getmodel(String id,ServletResponse response){
List<SpePractices> speBeans = ResMngService.SpePracticesList(id);
Gson gson = new Gson();
try {
response.getWriter().print(gson.toJson(speBeans));
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
也可以這樣寫
@RequestMapping("getmodule")
@ResponseBody
public Map<String, Object> getmodule(String systemKey){
Map<String, Object> modelMap = new HashMap<String, Object>();
List<copymodule> moduleList = ProService.getModuleListBysystem(systemKey);
modelMap.put("moduleList",moduleList);
return modelMap;
}
這樣寫和架構有關