毕设笔记--SSH前台JSP页面下拉列表框的值从数据库动态获取

来源:互联网 发布:node.js promise 编辑:程序博客网 时间:2024/05/22 03:31
今天的遇到的一个问题是:我想在前台JSP页面中做一个下拉列表框,
而这个列表框中显示的值是从数据库的一张表中动态获取的。
比如,表中有北京,上海,广州这三个数据,JSP的下拉框中显示的也是这三个值。
以后再表中新增了杭州,下拉框就相应的显示这四个城市。
对,就是这么简单的一个问题搞了我一上午。。。


-------------------------------------------------------------------------

这个应当是在JSP页面加载的时候,下拉列表框就已经有值了。

这些值必然是要从后台取的,写在后台的action中。

1. 在JSP的body标签里面的第一句,加上

<pre name="code" class="html"><body>    <s:action name="loadDistrict" namespace="/"></s:action>

这是Struts用来调用action的标签,name属性要在struts.xml中有定义。

比如我的struts.xml中是这样写的:

<action name="loadDistrict" class="com.edu.zjut.action.LoadDistrictInfoAction">  <result name="success">/jsp/college/addCollegeInfo.jsp</result><result name="error">/jsp/college/addCollegeInfo.jsp</result> <result name="input">/jsp/college/addCollegeInfo.jsp</result>  </action>
</pre><p>表示从数据库取值的代码写在 LoadDistrictInfoAction.java这个类中。</p><p>addCollegeInfo.jsp就是我最终要展示下拉框的页面。</p><p>在调用的 LoadDistrictInfoAction.java这个类的方法了之后,不管结果怎样,都会跳到addCollegeInfo.jsp页面。</p><p></p><p>2. LoadDistrictInfoAction.java 类中的写法。</p><p>因为项目用的是SSH框架,所以所有层都需要用Spring管理。</p><p>进入action调用的方法代码:</p><p><pre name="code" class="html">public String execute() {HttpServletRequest request = ServletActionContext.getRequest();ArrayList districtList = districtService.getAllDistrictInfos();request.setAttribute("districtList", districtList);return "success";}
这里用service获取数据库表中的所有区域信息之后,(是保存在一个list中的),将这个list保存在request中
之后在JSP中,可以用request.getAttribute("XXX")获得这里保存的list

 

3. addCollegeInfo.jsp JSP页面的写法

3.1   最开头需要导入list的包:

<%@page import="java.util.ArrayList"%>
引入这两个标签库:
<pre name="code" class="html"><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="s" uri="/struts-tags" %>

第一个标签库是后面遍历list时用<c:forEach>会用到,第二个标签库是在前面<s:action>会用到

3.2  JSP中嵌入Java代码的写法:

<%ArrayList listCode = (ArrayList<DistrictInfo>)request.getAttribute("districtList") ;  //把之前在action类中set的list取出来List newList = new ArrayList<DistrictInfo>();for(int i=0; i<listCode.size(); i++){    //System.out.println("地区:" +i+ ( (DistrictInfo)listCode.get(i) ).getName());    newList.add( (DistrictInfo)listCode.get(i) ); } request.setAttribute("disList", newList);     //这里set是后面<c:forEach>标签会用到    %>

3.3  下拉列表框的写法:

<div><label>所在区域:</label>   <div class="col-sm-8"><select name="collegeDistrictId" id="collegeDistrictId"><c:forEach items="${disList}" var="item">     <option value="${item.districtId}">${item.name}</option></c:forEach>  </select>   </div></div>



PS.  3.2中的最后一句千万要写。用<c:forEach>这个标签时的数据来源就是这个???


 

0 0
原创粉丝点击