框架使用struts2+spring+hibernate,但這里DWR只是跟spring的整合,和其余兩個框架沒有什么關系。
目的:打開頁面時自動刷新課程,而當選擇另外的課程時,欄目下拉框會發生相應變化。
頁面代碼addContent.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>FCKeditor</title>
<script type="text/javascript" src="/wsjx/dwr/engine.js"></script>
<script type="text/javascript" src="/wsjx/dwr/util.js"></script>
<script type="text/javascript"
src="/wsjx/dwr/interface/contentDaoAjax.js"></script>

<script type="text/javascript"> <!--
function updateCourse()
{
var teacher = "1";
contentDaoAjax.getCourses(teacher , createCourses);
}
function createCourses(courses)
{
var courseObj = document.getElementById('course');
DWRUtil.removeAllOptions(courseObj);
DWRUtil.addOptions(courseObj,{0:"請選擇"});
if(courses.length == 0)
{
alert("輸入有誤");
}
else
{
DWRUtil.addOptions(courseObj,courses);
}
}
function updateColumn()
{
var course = document.getElementById("course").value;
contentDaoAjax.getColumns(course , createColumns);
}
function createColumns(columns)
{
var columnObj = document.getElementById('column');
DWRUtil.removeAllOptions(columnObj);
if(columns.length == 0)
{
alert("輸入有誤");
}
else
{
DWRUtil.addOptions(columnObj,columns);
}
}
//--> </script>
</head>

<body onload="updateCourse()">
<form>
<table align="center">
<tr>
<td><br/>課程:
</td>
<td><br/><select name="course" id="course" onchange="updateColumn()"></select>
</td>
</tr>
<tr>
<td style="background-color: red" colspan="2"></td>
</tr>
<tr>
<td>欄目:
</td>
<td><select name="mknr.lm.id" id="column"><option value="0" selected>請選擇</option></select>
</td>
</tr>
<tr>
<td> <s:textfield name="mknr.title" size="100" label="題目" /> </td>
</tr>
<tr>
<td>
<input type="submit" value="Submit">
</td>
</tr>
</table>

</form>

</body>
</html>

上面部分使用了struts2的標簽,<select name="mknr.lm.id">也是為向后面的action傳遞值做準備,這里關于ajax的配置并沒有用到name。
web.xml加入以下幾句:
<!-- DWR servlet 配置 -->
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
dwr.xml
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create javascript="contentDaoAjax" creator="spring">
<param name="beanName" value="contentService"></param>
</create>
</allow>
</dwr>
因為我這里沒用到復雜的對象,而只是用到了簡單的Map(int,String),所以并不需要設置convert。如果是傳輸的是javabean,則需要進行轉換。
applicationContext.xml添加contentService的bean:
<bean id="contentService"
class="cn.edu.ujn.wsjx.managecontent.service.impl.ContentService">
<property name="mknrDao">
<ref bean="mknrDao"/>
</property>
<property name="jsjkDao">
<ref bean="jsjkDao"/>
</property>
<property name="lmDao">
<ref bean="lmDao"/>
</property>
<property name="yhDao">
<ref bean="yhDao"/>
</property>
</bean>
java類中相應的兩個方法
目的:打開頁面時自動刷新課程,而當選擇另外的課程時,欄目下拉框會發生相應變化。
頁面代碼addContent.jsp:





























































































web.xml加入以下幾句:



























applicationContext.xml添加contentService的bean:
















1
public Map getCourses(String teacher)
2
{
3
List<Jsjk> jsjks = jsjkDao.findByTeacherId(1);
4
Map map = new LinkedHashMap();
5
for (Jsjk jsjk : jsjks)
6
{
7
Kc kc = jsjk.getKcId();
8
System.out.println(kc.getName());
9
map.put(kc.getId(), kc.getName());
10
}
11
return map;
12
}
13
14
public Map getColumns(int course)
15
{
16
17
List<Lm> lms = lmDao.findByCourse(course);
18
Map map = new LinkedHashMap();
19
for(Lm lm : lms)
20
{
21
System.out.println(lm.getName());
22
map.put(lm.getId(), lm.getName());
23
}
24
return map;
25
}
這么一系列配置好以后,就能實現無刷新二級級聯了
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25
