本文實例講述了jsp從數據庫獲取數據填充下拉框實現二級聯動菜單的方法。分享給大家供大家參考,具體如下:
項目告一段落,現在將遇到的比較實用的東西記錄下來,寫了多遍了,謹記于此,以備查看!
1、首先在數據庫中獲取第一個下拉框的數據:
s:select listKey="tsFrom" id="t_tsfrom" cssClass="required"
listValue="tsFrom" cssStyle="width:90" list="tsfrom1"
name="tsFrom" theme="simple" headerKey=""
onchange="getTsFromDescribe(this);" headerValue="--請選擇--" />
后臺處理:
@Autowired
private CustomMaManager custommamanager;//注解相當的好用啊,代碼都省了一大截
tsfrom1 = custommamanager.getTsFrom();
Service:
//得到投訴來源
public ListCustomManage> getTsFrom(){
return custommanagedao.getTsFrom();
}
dao:
/**得到產品類型**/
public ListCustomManage> getTsFrom(){
return this.find("SELECT distinct new CustomManage(tsFrom,'2') FROM CustomManage C WHERE C.tsFrom IS NOT NULL ORDER BY tsFrom ASC");
}
注意:Oracle在java代碼里取出重復值與SqlServer不一樣,它得使用:
復制代碼 代碼如下:
SELECT distinct new CustomManage(tsFrom,'2') FROM CustomManage C WHERE C.tsFrom IS NOT NULL ORDER BY tsFrom ASC
先new實體bean(CustomManage) 然后在實體bean中給相應字段設置構造方法,不然將會出現后臺已經返回了值,但是在前臺下拉框中不顯示,下拉框空白的現象。
public CustomManage(String khname,int s){
this.khname=khname;
}
public CustomManage(String cpname,String type){
if("1".equals(type)){
this.cpname=cpname;
}else if("2".equals(type)){
this.tsFrom=cpname;
}else if("3".equals(type)){
this.khname=cpname;
}
}
這里需要在bean的實體類里面加入相應的構造方法,以此來供去重使用。
至此第一級的數據準備已經差不多了。使用S標簽的list集合來獲取后臺傳遞過來的值。
2、第二級下拉菜單的級聯====利用Ajax來獲取數據
在第一級列表的onchange事件中編寫:
//投訴信息來源信息級聯
function getTsFromDescribe(ts_describe){
var tsfrom = $("#t_tsfrom").val();
var tstsFrom = $("#ts_tsFrom").val();
Ext.Ajax.request( {
url : '${ctx}/complaints/complaints!getTsFrom.action',
params : {
tsfrom : tsfrom//通過json形式將前臺每次獲取到的值傳遞給后臺
},
success : function(response) {
var json = Ext.util.JSON.decode(response.responseText);
if (json.success) {
var data = json.strong>cmList/strong>;
if ("" == data) {
alert("請選擇投訴類型");
inputForm.t_tsfrom.focus();
$("#ts_tsFrom").empty();//每次需要將上一次的數據進行清空
} else {
$("#ts_tsFrom").empty();
//對獲取到的數據進行迭代
for ( var i = 0; i data.length; i++) {
var id = data[i];
var name = data[i];
$("#ts_tsFrom").append(
"option value='" + id + "'>" + name + "/option>");
}
dwr.util.removeAllOptions('tstsFrom');
dwr.util.addOptions('tstsFrom', data);
}
}
}
});
}
后臺返回數據:
public void getTsFrom() throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
String ts_names = tsfrom;
ListCustomManage> list = complaintsmanager.getTsDescribe(ts_names);
response.setContentType("text/javascript"); // 后臺控制的代碼
PrintWriter writer = response.getWriter();
// 將得到的list集合轉為JSON對象傳給前臺處理
JSONArray j = JSONArray.fromObject(list);
writer.println("{'success':true,'strong>cmList/strong>':" + j.toString() + "}");
}
到此一個從數據庫里動態獲取值,并且實現二級菜單級聯的功能就做的差不多了。發表出來希望對你對我都有好處哈。
這里加注一點就是在修改的時候下拉框的值不會保存,就是上一次點擊提交的時候保存在數據庫里的值無法填充到下拉框。
處理辦法:
var op1 = document.getElementById("op1").value;
if(op1!=null){
$("#cp_validity").val(op1); //將取出來的值塞到下拉框中。一個蘿卜一個坑
}
input type="hidden" id="op1" value="${compDisposal.validity}">//使用表達式將存在數據庫里的值取出來,放在隱藏域里面
希望本文所述對大家jsp程序設計有所幫助。
您可能感興趣的文章:- js實現的全國省市二級聯動下拉選擇菜單完整實例
- 最好用的省市二級聯動 原生js實現你值得擁有
- js操作二級聯動實現代碼
- 全國省市二級聯動下拉菜單 js版
- js實現select二級聯動下拉菜單
- js實現的下拉框二級聯動效果
- 簡單js代碼實現selece二級聯動(推薦)
- JS簡單實現城市二級聯動選擇插件的方法
- javascript支持區號輸入的省市二級聯動下拉菜單
- js實現二級聯動簡單實例