Spring MVC整合DWR
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>
- <?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配置 -->
- /**
- *
- * @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 onchange="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类的同名方法。
本文所展示的功能为,在下拉框中选择菜单后,显示其详细信息。
评论暂时关闭