Spring MVC整合DWR

        本文基于Spring MVC整合Mybatis

        (1) 导入包dwr.jar。

        (2) 在web.xml中配置dwr。只需在配置DispatcherServlet下添加dwr的url-mapping即可,修改后的DispatcherServlet配置如下所示:

	<!-- servlet控制跳转 -->
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 配置文件 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:context-dispatcher.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>

        (3) 在context-dispatcher.xml中添加dwr的配置,修改后的文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
	xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
	xsi:schemaLocation="
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/mvc 
       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
       http://www.directwebremoting.org/schema/spring-dwr 
	http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- 使用注解的包,包括子集 -->
	<context:component-scan base-package="com.geloin.spring" />
	<!-- 通过注解,把URL映射到Controller上,该标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
	<mvc:annotation-driven />
	<!-- 视图解析器 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/pages/" />
		<property name="suffix" value=".jsp"></property>
	</bean>
	
	<!-- 要求dwr在spring容器中检查拥有@RemoteProxy 和 @RemoteMethod注解的类。注意它不会去检查Spring容器之外的类。 -->
	<dwr:annotation-config id="dwr" />
	<!-- 要求DWR将util.js和engine.js映射到dwrController -->
	<dwr:url-mapping />
	<!-- 定义dwr -->
	<dwr:controller id="dwrController" debug="true">
		<dwr:config-param name="allowScriptTagRemoting"
			value="true" />
		<dwr:config-param name="crossDomainSessionSecurity"
			value="false" />
	</dwr:controller>
</beans>

        此处需要注意的是,mvc:annotation-driven会默认注册DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter和SimpleControllerHandlerAdapter,而使用Dwr时必须配置SimpleControllerHandlerAdapter,所以若不使用Mvc:annotation-driven时,请将dwr的配置改成:

        <!-- DWR配置 -->
	<bean
		class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
	<!-- 要求dwr在spring容器中检查拥有@RemoteProxy 和 @RemoteMethod注解的类。注意它不会去检查Spring容器之外的类。 -->
	<dwr:annotation-config id="dwr" />
	<!-- 要求DWR将util.js和engine.js映射到dwrController -->
	<dwr:url-mapping />
	<!-- 定义dwr -->
	<dwr:controller id="dwrController" debug="true">
		<dwr:config-param name="allowScriptTagRemoting"
			value="true" />
		<dwr:config-param name="crossDomainSessionSecurity"
			value="false" />
	</dwr:controller>
	<!-- DWR配置 -->


        (4) 在com.geloin.spring.controller下添加dwr控制器DirectController

/**
 *
 * @author geloin
 * @date 2012-4-1 上午11:32:02
 */
package com.geloin.spring.controller;

import javax.annotation.Resource;

import org.directwebremoting.annotations.RemoteMethod;
import org.directwebremoting.annotations.RemoteProxy;
import org.springframework.stereotype.Controller;

import com.geloin.spring.entity.Menu;
import com.geloin.spring.service.MenuService;

/**
 * DWR
 * 
 * @author geloin
 * @date 2012-4-1 上午11:32:02
 */
@Controller
@RemoteProxy(name = "directController")
public class DirectController {

	@Resource(name = "menuService")
	private MenuService menuService;

	/**
	 * 要删除的角色下是否含有用户
	 * 
	 * @author geloin
	 * @date 2012-4-1 下午4:00:03
	 * @param ids
	 * @return
	 */
	@RemoteMethod
	public String showMenu(Integer id) {
		Menu menu = this.menuService.findById(id);
		StringBuilder builder = new StringBuilder();
		builder.append(id);
		builder.append("--");
		builder.append(menu.getName());
		builder.append("--");
		builder.append(menu.getParentId());
		builder.append("--");
		builder.append(menu.getUrl());
		builder.append("--");
		builder.append(menu.getIsShowLeft());
		return builder.toString();
	}

}


        @RemoteProxy表示该类为Dwr远程代理类,名称为directController,即在jsp可通过directController.js代表该类;@RemoteMethod代表showMenu方法为一个远程代理方法,该方法传入一个参数,返回一个字符串。

        (5) 在jsp页面使用dwr,修改/WEB-INF/pages/background/menu.jsp页面,结果如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
<script type='text/javascript' src='<c:url value="/dwr/engine.js"/>'></script>
<script type='text/javascript' src='<c:url value="/dwr/util.js" />'></script>
<script type='text/javascript'
	src='<c:url value="/dwr/interface/directController.js" />'></script>
<script type="text/javascript">
	function view(obj) {
		var id = obj.value;
		directController.showMenu(id, function(data) {
			document.getElementById('view').innerHTML = data;
		});
	}
</script>
</head>
<body>
	<select οnchange="javascript:view(this);">
		<c:forEach items="${result }" var="item">
			<option value="${item.id }">${item.name }</option>
		</c:forEach>
	</select>
	<div id="view"></div>
</body>
</html>


        /dwr/interface/directController.js即表示com.geloin.spring.controller.DirectController.java,直接通过directController.showMenu调用DirectController类的同名方法。
        本文所展示的功能为,在下拉框中选择菜单后,显示其详细信息。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值