jsp下拉框级联查询以及java代码实现

需求描述:

  • 我们在开发过程中,很多页面查询,新增修改页面的下拉,需要通过一个下拉框的值,确定另一个下拉的值,典型的就是,选择年级,另一个下拉需要展示对应的班级,选择了班级,需要展示对应的学生。
  • 下面是存放地方,建筑物,级联查询建筑物与房间的例子,效果如下

在这里插入图片描述

  • 前台部分使用jsp做页面,fmt,cus都是jsp的标签,如果是使用jsp做开发,可以直接复用代码,如果使用html页面,则需要定义一个div容器,作为js循环查询到的值。

    key对应的是输入框的标题,itemList是后台查询的值,将值填充到下拉框

  <div class="searchbody">
	<dl>
		<fmt:message key="oaEquipment.new.storage"/>:<cus:SearchFilterTag name="orgcode" id="orgcode" op="eq" type="string" itemList="${schList}" onChange="doSubNew()" defaultText="全部校区" style="width:250px"/>
		<cus:SearchFilterTag name="propertyBuilding.id" id="propertyBuildingId" op="eq" type="long" itemList="${buildingList}" onChange="doSubNew()" defaultText="全部建筑"/>
		<cus:SearchFilterTag name="propertyBuildingFloor.id" id="propertyBuildingFloorId" op="eq" type="long" itemList="${roomList}" onChange="doSubNew()" defaultText="全部房间"/>
	</dl>
  </div>

重写onChange方法,通过获取id过滤级联操作,doSub()是默认的表单提交方法

 <script type="text/javascript">
    	//操作过滤条件并提交
   		function doSubNew(){
			if($("#orgcode").val() == ''){
				$("#propertyBuildingId").val("");
			}
			if($("#propertyBuildingId").val() == ''){
				$("#propertyBuildingFloorId").val("");
			}
			doSub();
		}
	</script>

java后台代码的查询方法,EntityFilter的作用类似session,可以从ef中取到jsp页面中对应的值

public String doSelect(Model model) throws Exception{
		ZhxyUser user = (ZhxyUser) getUser();
		String[] orgCodes = user.getAttrMap().get("relatedOrgCodes").toString().split(",");
		
		EntityFilter ef = getEntityFilter();
		String teacherName = null;
		String orgcode = null;
		Long propertyBuilding = null;
		//当存在学校编码时,获取值
		if(ef.isFilterExist("orgcode"))
		{
			orgcode = String.valueOf(ef.getFilterValue("orgcode"));
		}
		//当存在建筑id时,获取值
		if(ef.isFilterExist("propertyBuilding.id"))
		{
			propertyBuilding = Long.valueOf(String.valueOf(ef.getFilterValue("propertyBuilding.id")));
		}
		if(ef.isFilterExist("teacherName"))
		{
			teacherName = String.valueOf(ef.getFilterValue("teacherName"));
		}

		//根据传入条件查询存储位置的下拉集合
		List<SelectItem> schList = new ArrayList<SelectItem>();
		List<SelectItem> buildingList = new ArrayList<SelectItem>();
		List<SelectItem> roomList = new ArrayList<SelectItem>();
		schList = organizationOutService.doGetRelatedOrgSelectItemsByIdenId(user.getIdentityId(),
			PlatformAllCodeKey.ORGANIZATION_TYPE_SCH);
		if(!StringUtils.isNullString(orgcode))
		{
			buildingList = propertyBuildingService.getBuildingIdSelectItemsByOrgCode(orgcode);
		}
		if(propertyBuilding != null)
		{
			roomList = propertyBuildingFloorService.getRoomIdSelectItemsByBuildingId(propertyBuilding);
		}

		//根据过滤条件,获取OaEquipmentDomain集合
		ef.addFilter("orgcode", Op.IN, orgCodes);
		addOrder("createTime","DESC");
		List<OaEquipmentDomain> resultList = oaEquipmentService.doGetPagedList(getPagedInfo());
		copyPageListInfo(resultList);

		model.addAttribute("schList", schList);
		model.addAttribute("buildingList", buildingList);
		model.addAttribute("roomList", roomList);
		model.addAttribute("resultList", resultList);
		model.addAttribute("teacherName", teacherName);
		return "oa/oaEquipment/oaEquipmentList";
	}

service层通过前台传的code的值查询建筑物的列表

 // 根据学校code获取建筑物下拉集合
    public List<SelectItem> getBuildingIdSelectItemsByOrgCode(String orgCode) throws ApplicationException, SystemException {
        List<SelectItem> items = new ArrayList<SelectItem>();
        if (StringUtils.isNullString(orgCode)) {
            return items;
        }
        //根据过滤条件获取 建筑物对象列表
        EntityFilter ef = createNewEntityFilter();
        ef.addFilter("dataOrgcode", orgCode);
        List<PropertyBuilding> propertyBuildings = propertyBuildingDao.getFilterList(ef);
        //将 建筑物对象列表 封装成 建筑物下拉集合
        for (PropertyBuilding propertyBuilding : propertyBuildings) {
            SelectItem item = new SelectItem();
            item.setSelectValue(String.valueOf(propertyBuilding.getId()));
            item.setSelectText(propertyBuilding.getBuildingName());
            items.add(item);
        }
        return items;
    }
  • 这种做法才用的是表单提交的方式,进行查询关联的下拉

  • 点击第一个下拉框的值,onchange事件携带参数进行提交,后来取到值以后,查询对应的下拉的值,然后重新进入页面,页面显示的时候,将查询的值显示出来,同时,会显示前一个下拉选中的值。
  • 还有一种做法是ajax提交的方式,这种方式需要将获取到值,用js的方式,写入下拉,大家可以根据自己得实际情况来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉梦lm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值