jsp+javascript实现动态下拉二级联动(select+option)

最近在做一个项目,要使用动态下拉二级联动效果。就是当改变新闻大类别后,相应的小类别也要调整。数据库我设置了三个字段(id,name,parentId),因为只做二层目录,所以第一层目录的父节点(parentId)都为-1,第二层目录根据它的parentId可知它的父节点。新闻类别分别从数据库中查询。具体实现代码如下:

前端:

<%@page import="com.enterprise.daoImpl.NodeDaoImpl,com.enterprise.domain.*"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="Inc/Head.jsp" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%!
	NodeDaoImpl nodeDaoImpl=new NodeDaoImpl();
	List<Node> list=nodeDaoImpl.getNodes(-1);//获取第一层节点
	String[][] nameString=new String[list.size()][];//定义一个二维数组
	int[][] nameid=new int[list.size()][];
	%>
	<%
	if(list.size()>0)
	for(int i=0;i<list.size();i++)
	{
	 	List<Node> childrenNode=nodeDaoImpl.getNodes(list.get(i).getId());//获取该节点的所有子节点
	 	nameString[i]=new String[childrenNode.size()];
	 	nameid[i]=new int[childrenNode.size()];
	 	if(childrenNode!=null&&childrenNode.size()>0)
	 	for(int j=0;j<childrenNode.size();j++){
	 	
	 		nameString[i][j]=new String(childrenNode.get(j).getClassName());
	 		nameid[i][j]=new Integer(childrenNode.get(j).getId());
	 	}
		
	}
	
/* 	for(int i=0;i<nameString.length;i++){
		for(int j=0;j<nameString[i].length;j++)
		System.out.print(nameString[i][j]);
		System.out.println("");
		} */
 %>

<script language = "JavaScript">


function getChange(){
	var bigClass=document.getElementById("bigClassName");
	var secondClass=document.getElementById("secondClassName");
	secondClass.options.length=1;
	var index=bigClass.selectedIndex;
	<%
		for(int i=0;i<nameString.length;i++){
			%>
			if(index==<%=i%>){
				<%for(int j=0;j<nameString[i].length;j++){%>
				secondClass.options.add(new Option('<%=nameString[i][j]%>','<%=nameid[i][j]%>'))
				
				<%}%>
			}
			
			<%
		}
	%>


}
}

            <td> 
		<select name="news.bigClassName" onChange="getChange();" size="1" id="bigClassName">
		<span style="white-space:pre">	</span><%if(list!=null&&list.size()>0)
			for(Node node:list){
			%>
		
                <span style="white-space:pre">		</span><option selected value="<%=node.getId()%>"><%=node.getClassName()%></option>
                
			<% }%>
               
              </select> <select name="news.secondClassName" id="secondClassName">
                <option value="" selected>不指定小类</option>
              
              </select></td>




 后端: 

package com.enterprise.daoImpl;

import java.util.List;

import com.enterprise.dao.DAO;
import com.enterprise.dao.NodeDao;
import com.enterprise.domain.Node;

public class NodeDaoImpl extends DAO<Node> implements NodeDao {

	@Override
	public List<Node> getNodes(int id) {
		// TODO Auto-generated method stub
		String sqlString="select * from Node where parentId=?";
		return getForList(sqlString,id);
	}

	@Override
	public int insertNode(Node node) {
		// TODO Auto-generated method stub
		String sql="insert into Node(className,parentId) values(?,?)";
		return executeUpdate(sql, node.getClassName(),node.getParentId());
	}

	@Override
	public int updateNode(Node node) {
		// TODO Auto-generated method stub
		String sqlString="update Node set className=? where id=?";
		return executeUpdate(sqlString, node.getClassName(),node.getId());
	}

	@Override
	public int deleteNode(Node node) {
		// TODO Auto-generated method stub
		String sqlString="delete from Node where id=?";
		return executeUpdate(sqlString, node.getId());
	}

	@Override
	public Node getNode(int id) {
		// TODO Auto-generated method stub
		String sqlString="select * from Node where id=?";
		
		return (Node)get(sqlString, id);
	}
	
}

因为涉及整个项目,代码不能完全提供,仅供参考。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现三级联动的基本思路是通过Ajax技术实现异步请求后端数据,然后动态生成页面元素实现级联效果。下面是一个Spring MVC+JSP实现三级联动的示例代码: 1. 前端JSP页面 ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>三级联动示例</title> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ // 加载省份列表 $.ajax({ url: "${pageContext.request.contextPath}/province", type: "GET", success: function(data){ var provinceList = JSON.parse(data); var html = ""; for(var i=0; i<provinceList.length; i++){ html += "<option value='"+provinceList[i].id+"'>"+provinceList[i].name+"</option>"; } $("#province").html(html); } }); // 根据省份id加载城市列表 $("#province").change(function(){ var provinceId = $(this).val(); $.ajax({ url: "${pageContext.request.contextPath}/city/"+provinceId, type: "GET", success: function(data){ var cityList = JSON.parse(data); var html = ""; for(var i=0; i<cityList.length; i++){ html += "<option value='"+cityList[i].id+"'>"+cityList[i].name+"</option>"; } $("#city").html(html); } }); }); // 根据城市id加载区县列表 $("#city").change(function(){ var cityId = $(this).val(); $.ajax({ url: "${pageContext.request.contextPath}/district/"+cityId, type: "GET", success: function(data){ var districtList = JSON.parse(data); var html = ""; for(var i=0; i<districtList.length; i++){ html += "<option value='"+districtList[i].id+"'>"+districtList[i].name+"</option>"; } $("#district").html(html); } }); }); }); </script> </head> <body> <select id="province"> <option value="">请选择省份</option> </select> <select id="city"> <option value="">请选择城市</option> </select> <select id="district"> <option value="">请选择区县</option> </select> </body> </html> ``` 2. 后端Controller代码 ```java @Controller public class RegionController { @Autowired private RegionService regionService; @RequestMapping(value="/province", method=RequestMethod.GET) @ResponseBody public String getProvinceList(){ List<Province> provinceList = regionService.getProvinceList(); return JSON.toJSONString(provinceList); } @RequestMapping(value="/city/{provinceId}", method=RequestMethod.GET) @ResponseBody public String getCityList(@PathVariable("provinceId") String provinceId){ List<City> cityList = regionService.getCityList(provinceId); return JSON.toJSONString(cityList); } @RequestMapping(value="/district/{cityId}", method=RequestMethod.GET) @ResponseBody public String getDistrictList(@PathVariable("cityId") String cityId){ List<District> districtList = regionService.getDistrictList(cityId); return JSON.toJSONString(districtList); } } ``` 3. Service层代码 ```java @Service public class RegionServiceImpl implements RegionService { @Autowired private RegionDao regionDao; @Override public List<Province> getProvinceList() { return regionDao.getProvinceList(); } @Override public List<City> getCityList(String provinceId) { return regionDao.getCityList(provinceId); } @Override public List<District> getDistrictList(String cityId) { return regionDao.getDistrictList(cityId); } } ``` 4. DAO层代码 ```java @Repository public class RegionDaoImpl implements RegionDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public List<Province> getProvinceList() { String sql = "select province_id, province_name from tb_province"; List<Province> provinceList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Province>(Province.class)); return provinceList; } @Override public List<City> getCityList(String provinceId) { String sql = "select city_id, city_name from tb_city where province_id=?"; List<City> cityList = jdbcTemplate.query(sql, new Object[]{provinceId}, new BeanPropertyRowMapper<City>(City.class)); return cityList; } @Override public List<District> getDistrictList(String cityId) { String sql = "select district_id, district_name from tb_district where city_id=?"; List<District> districtList = jdbcTemplate.query(sql, new Object[]{cityId}, new BeanPropertyRowMapper<District>(District.class)); return districtList; } } ``` 其中Province、City和District是数据实体类,包含id和name两个属性。以上代码只是一个简单示例,实际项目中需要根据具体需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

月夜归醉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值