1. 程式人生 > >畢設筆記--SSH前臺JSP頁面下拉列表框的值從資料庫動態獲取

畢設筆記--SSH前臺JSP頁面下拉列表框的值從資料庫動態獲取

今天的遇到的一個問題是:我想在前臺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>這個標籤時的資料來源就是這個???