jsp从数据库获取数据填充下拉框实现二级联动菜单的方法

本文实例讲述了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 List<CustomManage> getTsFrom(){
  return custommanagedao.getTsFrom();
}

dao:

/**得到产品类型**/
public List<CustomManage> 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;
  List<CustomManage> 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程序设计有所帮助。

(0)

相关推荐

  • ASP+JS三级联动下拉菜单[调用数据库数据]

    网上三级菜单多是多但是代码都比较烦,我这个应该说还是比较直观的:'肯定先要连接数据库了,不用说了 '数据库结构 '类别1表名称:a  字段:ID,Name  说明:ID为主键是类别1的ID值,Name为类别1的名称 '类别2表名称:aa  字段:ID,aID,Name  说明:ID为主键是类别2的ID值,aID为所属类别1的ID值,Name为类别2的名称 '类别3表名称:aaa  字段:ID,aID,aaID,Name  说明:ID为主键是类别3的ID值,aID为所属类别1的ID值,aaID为所

  • 省市区三级联动下拉框菜单javascript版

    实现省市区三级下拉列表框,并且要实现联动效果. 方法一: 1.视图代码 <select class="prov" id="prov5" name="Province" data-code="@Model.Province"> </select> <select class="city" id="city5" name="City" dat

  • js实现简单的联动菜单效果

    本文实例讲述了js实现简单的联动菜单效果.分享给大家供大家参考.具体如下: 这是一个最简单的js联动菜单代码,在DW里可以自动生成,不想在DW里生成的话,把此份代码拷贝下拉修改也可以.网页上常用到一种Select联动菜单. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-select-ld-menu-codes/ 具体代码如下: <html> <head> <title>简单的Select联动菜单代码</ti

  • JavaScript实现三级联动菜单效果

    三级联动考察的应该是对于数据的处理,只要清楚其中的关系,再多几级都是一样的: html部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>3级联动菜单</title> <script> var region = { 广东: { "广州":["广州1","广州2",&

  • 全国省市二级联动下拉菜单 js版

    本文实例为大家分享了js实现二级联动下拉菜单的具体代码,供大家参考,具体内容如下 js代码部分: /* * 全国二级城市联动 js版 */ function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ this.Items[id] = iArray; } Dsy.prototype.Exists = function(id){ if(typeof(this.Items[id]) == "undefined&

  • 实例详解AngularJS实现无限级联动菜单

    多级联动菜单是常见的前端组件,比如省份-城市联动.高校-学院-专业联动等等.场景虽然常见,但仔细分析起来要实现一个通用的无限分级联动菜单却不一定像想象的那么简单.比如,我们需要考虑子菜单的加载是同步的还是异步的?对于初始值的回填发生在前端还是后端?如果异步加载,是否对于后端API的返回格式有严格的定义?是否容易实现同步.异步共存?是否可以灵活的支持各类依赖关系?菜单中是否有空值选项?--一系列的问题都需要精心处理. 带着这些需求搜索了一圈,不太出乎意料,并没有能在AngularJS的生态中找到一

  • js实现的全国省市二级联动下拉选择菜单完整实例

    本文实例讲述了js实现的全国省市二级联动下拉选择菜单.分享给大家供大家参考.具体如下: 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-province-city-cho-menu-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

  • JS简单实现多级Select联动菜单效果代码

    本文实例讲述了JS简单实现多级Select联动菜单效果代码.分享给大家供大家参考.具体如下: JS联动菜单,简单代码实现JS多级Select联动菜单,也就是大家常用的一款菜单,Select联动状态的菜单,网页上经常见到的效果,希望大家能用得上. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-simple-select-ld-menu-codes/ 具体代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD

  • javascript实现省市区三级联动下拉框菜单

    本文实例讲述了javascript实现省市区三级联动下拉框菜单代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 首先写一个静态的页面: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title> <!-- 使用QQ的省市区数据 --> <!-- <script type="text/javascript" src="http:/

  • JS实多级联动下拉菜单类,简单实现省市区联动菜单!

    作者:ybcola 这段js代码是很久以前的作品了,应该在一年以前吧!当时是在做一个农村人才管理系统的时候遇到的问题,因为系统要求参选择并通过后台添加省市区县甚至到乡镇村队,而在对人才的信息进行修改时要求用下拉列表进行选择,并且每个人才来源可能是省市,或者省市区县,或者一直取队都要选择!那时第一反映就是找网上是否有现成的代码,找到一个最常用的就是省市二级联动,那时那段js代码在网上随处可见,可是拿过来对我来说没用,因为我需要的是一个多级联通并且可以自由扩展的代码!最终还是自己动手写了JS代码.

随机推荐