当前位置:  编程技术>java/j2ee

JSP页面中如何用select标签实现级联

    来源: 互联网  发布时间:2014-10-19

    本文导语:  做查询页面,查询条件比较多的时候往往会涉及到级联。举个简单的例子,拿教务系统来说,我们要查询教学计划信息,查询条件是入学批次、学生层次(专升本、高升专)、专业、课程。 它们之间有什么级联关系呢?入学批...

做查询页面,查询条件比较多的时候往往会涉及到级联。举个简单的例子,拿教务系统来说,我们要查询教学计划信息,查询条件是入学批次、学生层次(专升本、高升专)、专业、课程。

它们之间有什么级联关系呢?入学批次影响学生层次(某个入学批次可能只有专升本或者高升专一个学生层次)、专业、课程,学生层次影响专业、课程,专业又影响课程。也就是说当选择入学批次时,学生层次、专业和课程的下拉框会局部刷新,选择学生层次时,专业和课程的下拉框会局部刷新,选择专业时,课程的下拉框也会局部刷新。

我们当然不希望已经选择的操作随着页面的刷新又被初始化,再者前面提到选择一项后相关的下拉框是局部刷新。很容易想到用填充页面的方法来实现级联。

笔者的填充方法是通过提交JS,由Controller获取数据,将数据传到辅助的JSP页面,再用回调函数将辅助JSP页面中的数据填充给相应下拉框。说的抽象,直接上代码了,四级级联稍微麻烦一些,知道原理后也好做,笔者上三级级联的代码。级联样式如下图:



 JSP页面代码:

代码如下:

  
   
     入学批次:  //选择入学批次会刷新层次和专业
      
        --请选择--
       
         ${gradeInfo.gradeName}        
       
    
     统考课程:
      
        --请选择--
       
         ${uniExamCourse.uniExamCourseName}        
       
    
   
   
         //设置ID,用于填充层次和专业的下拉框
     
      
        层       次:    //选择层次后刷新专业
          --请选择--
         
           ${educationLevel.educationLevelName}          
         
       
        专        业:
          --请选择--
         
           ${special.specialName}          
         
       
      
     
    
   
  

JS的代码如下:
代码如下:

//JavaScript Document
 var xmlHttp; //用于保存XMLHttpRequest对象的全局变量
 //用于创建XMLHttpRequest对象
 function createXmlHttp() {
  //根据window.XMLHttpRequest对象是否存在使用不同的创建方式
  if (window.XMLHttpRequest) {
   xmlHttp = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式
  } else {
   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
  }
 }
 function refreshEduLevelAndSpecialAjax() {
  var grade = document.getElementById("grade").value;
  refreshEduLevelAndSpecial(grade);
 }
 function refreshEduLevelAndSpecial(grade) {
  createXmlHttp(); //创建XMLHttpRequest对象
  xmlHttp.onreadystatechange = refreshEduLevelAndSpecialElement; //设置回调函数
  xmlHttp.open("POST", "eduLevelAndSpecialByGradeNameInSpecialDetail",
    true); //发送POST请求
  xmlHttp.setRequestHeader("Content-type",
    "application/x-www-form-urlencoded");
  xmlHttp.send("grade=" + grade);
 }
 //处理服务器返回的信息 更新层次专业下拉框
 function refreshEduLevelAndSpecialElement() {
  if (xmlHttp.readyState == 4) {
   if (xmlHttp.status == 200) {
    //此处xmlHttp.responseText是请求的*Controller的某个方法返回的渲染页面的源代码
    document.getElementById("refreshEduLevelAndSpecialAjax").innerHTML = xmlHttp.responseText;
   }
  }
 }
 function refreshSpecialAjax() {
  var grade = document.getElementById("grade").value;
  var eduLevelId = document.getElementById("eduLevelId").value;
  refreshSpecial(grade, eduLevelId);
 }
 function refreshSpecial(grade, eduLevelId) {
  createXmlHttp(); //创建XMLHttpRequest对象
  xmlHttp.onreadystatechange = refreshSpecialElement; //设置回调函数
  xmlHttp.open("POST", "specialByGradeNameAndEduLevelIdInSpecialDetail",
    true); //发送POST请求
  xmlHttp.setRequestHeader("Content-type",
    "application/x-www-form-urlencoded");
  xmlHttp.send("grade=" + grade + "&eduLevelId=" + eduLevelId);
 }
 //处理服务器返回的信息 更新专业下拉框
 function refreshSpecialElement() {
  if (xmlHttp.readyState == 4) {
   if (xmlHttp.status == 200) {
    //此处xmlHttp.responseText是请求的*Controller的某个方法返回的渲染页面的源代码
    document.getElementById("refreshSpecialAjax").innerHTML = xmlHttp.responseText;
   }
  }
 }

Controller代码:
代码如下:

@RequestMapping(value = "/eduLevelAndSpecialByGradeNameInSpecialDetail")
  public ModelAndView getEduLevelAndSpecialByGradeNameInSpecialDetail(HttpServletRequest request,
    HttpServletResponse response) throws JsonParseException, JsonMappingException, JSONException, IOException{  
   String gradeName=request.getParameter("grade");    
   String eduLevelId=request.getParameter("eduLevelId");  
   if(gradeName==null||gradeName.equals("0")){   
    gradeName="null";
   }
   if(eduLevelId==null||eduLevelId.equals("0")){   
    eduLevelId="null";
   }
   ArrayList eduLevelList=uess.getEduLevelIdByGradeNameInSpecialDetail(gradeName);
   ArrayList specialIdList=uess.getSpecialIdByGradeNameAndEduLevelIdInSpecialDetail(gradeName, eduLevelId);  
   mav.addObject("educationLevel", eduLevelList);
   mav.addObject("specialList", specialIdList);
   mav.setViewName("scoreManage/uniExamScore/eduLevelAndSpecialAjax");
   return mav;
  }
  @RequestMapping(value = "/specialByGradeNameAndEduLevelIdInSpecialDetail", method = RequestMethod.POST)
  public ModelAndView getSpecialByGradeNameAndEduLevelIdInSpecialDetail(HttpServletRequest request,
    HttpServletResponse response) throws JsonParseException, JsonMappingException, JSONException, IOException{
   String gradeName=request.getParameter("grade"); 
   String eduLevelId=request.getParameter("eduLevelId");
   System.out.println("grade:"+gradeName+"  eduLevelId:"+eduLevelId);
   if(gradeName==null||gradeName.equals("0")){   
    gradeName="null";
   }
   if(eduLevelId==null||eduLevelId.equals("0")){   
    eduLevelId="null";
   }
   ArrayList specialList=uess.getSpecialIdByGradeNameAndEduLevelIdInSpecialDetail(gradeName, eduLevelId);  
   mav.addObject("specialList", specialList);
   mav.setViewName("scoreManage/uniExamScore/specialAjax");
   return mav;
  }

后台代码没有给出来,但应该看得懂,就是获取后台数据传到eduLevelAndSpecialAjax.jsp和specialAjax.jsp页面。这两个页面用于填充原页面,通过ID来填充相应区域,两个页面代码如下。
eduLevelAndSpecialAjax.jsp辅助页面:
代码如下:

    //ID用于填充原页面
   
   
     层       次:
       --请选择--
      
        ${educationLevel.name}
      
    
     专        业:
       --请选择--
      
        ${special.name}
      
    
    
   
  

specialAjax.jsp辅助页面:
代码如下:

专        业:    //ID用于填充原页面
     --请选择--
    
      ${special.name}
    
  

这样就在JSP页面实现了填充。


    
 
 

您可能感兴趣的文章:

  • [求助]如何将用jsp写成的动态页面(*.jsp), 转换成静态页面(*.html)???
  • 为何我使用javascript中location'****.jsp'跳到某一页面,jsp页面不重新编译执行
  • 让JSP页面过期, 保证每次JSP页面都是最新的.
  • 在jsp页面加载时自动调用某个特定的servlet,由servlet查询数据库输出WEB页面返回给jsp显示?
  • 在JSP中如何从一个页面转向另一个页面?
  • 输入http://localhost:8080显示欢迎页面但无法显示JSP页面
  • 一JSP网站,统一指定一个errorPage页面,统一处理异常,在指定的errorPage页面中,我想知道具体是哪个页面出错的,即想知道出错页面的具
  • JSP中如何在一页面执行后导入另一页面?
  • 想把一个jsp转到另一个jsp页面,要穿参数,中文的(jsp变量)。谁教教我?!
  • ?启动jsp页面时,让页面刷新(一次)?
  • JBuilder运行JSP的问题,一次只运行一个JSP页面
  • JSP父页面传参数到子页面及接收示例
  • jsp显示server数据库的内容,如何实现定时更新jsp页面
  • JSP页面如何设置页面的过期?
  • jsp页面中如何打印格式报表(不是打印页面内容)?
  • jsp对页面的大小有否限制,我的页面在60多K之后就断掉了!!!
  • 如何在jsp页面里通过按一个按钮,就关闭这个页面?我急,谢谢。17:00结贴;
  • 当我修改了一个jsp文件之后刷新页面,为什么页面上的内容没有更新的呢?
  • 用JBUILDER如何调试一个JSP工程,一次只运行一个JSP页面?
  • 在JSP中,如何从一个页面跳到另下页面,而同时还能保持Session?
  • WEB前端 iis7站长之家
  • 使用JSP扩展标签,可否从标签内得到一个输出参数?
  • JSP表格标签库 WebJMX
  • 请高手指点,怎样学习JSP标签库,一定给分,不够在加!
  • JSP标签库 Coldtags
  • JSP 标签库集合 Taglibs
  • Google地图JSP标签库
  • JSP 标准标签库 JSTL
  • JSP标签 Noka Tag
  • JSP标签库 AjaxTags
  • JSP加密标签库 JCE taglib
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 帮帮新手,jsp面向对象吗?想把c/s结构的引用用jsp改写,交互功能可以实现吗
  • 一个框界网爷包含上下两个网页a1.jsp和a2.jsp,怎么实现a1.jsp自身不变且提交数据到下面的a2.jsp呢?不胜感激,急..
  • 请问在jsp中如何实现相对路径?我在jsp文件中指定相对路径的文件,可是程序找不到!
  • 怎么用Jsp实现在页面实现树型结构?
  • ******"Servlet根据JSP视图的需求生成JavaBeans的实例并输出给JSP环境"如何实现上面这句话的效果??*******
  • 在ASP中可以轻易实现,不知道在JSP中能否实现?
  • 在jsp中如何实现页面的重新指向?
  • 在JSP中如何实现重新定向到其他页面?
  • 在JSP中如何实现MD5加密?
  • 怎么实现jsp中的页面跳转
  • JSP调用EJB如何实现耦合度最底
  • JSP的SESSION能存贮数组吗?我想实现“购物车”功能?
  • 〔help〕有关JSP实现注册用户中的类型问题?
  • 求助:用JSP实现统计来访人数,请问怎样实现?
  • 调试jsp的时如何实现像asp中的response.end的效果
  • 在jsp 中如何实现像asp 中的页面弹出式的菜单
  • ****怎样在局域网里实现JSP的访问!!!!******************
  • jsp实现点击help打开chm文件
  • JSP中如何实现动态select选项框?
  • 那位高手知道怎样实现用JSP跟ORACLE连上?
  • JSP中清空cookie代码参考
  • 现有1.jsp、2.jsp、3.jsp三个文件,我怎么在3.jsp文件中得到1.jsp中输入的值?
  • 请问jsp和serlet之间怎么通讯,jsp和jsp之间呢?
  • 请问<%@include file="abc.jsp"%>与<jsp:include page="abc.jsp"/>之间的差别
  • response.sendRedirect("index.jsp") 和 <jsp:forward page="index.jsp"/>的区别?
  • aaa.jsp有如下链接,当单击该链接时将id值传递给bbb.jsp,怎样在bbb.jsp中引用这个id值?
  • jsp+bean还是jsp+ejb还是jsp+servlet还是asp+activex好?
  • 谁能告诉我,怎么调试jsp程序呀!我在jsp中调用java,但是Tomcat这家伙只会给我报jsp文件出错。这可怎么办呀?
  • jsp中如何获得当前jsp文件所在的目录,用request.getServletPath()得到的路径含有jsp文件名,有没有办法得到目录(不含文件名)?
  • 初学jsp,一个html调用一个jsp,这个jsp调用一个javaBean,已编译成类,最后如何部署(用j2sdkee)?
  • 我要学jsp,已经下载了j2ee1.4,需要一个支持jsp引擎的WEB服务器或jsp引擎!!(急,马上给分)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3