日期:2014-05-16  浏览次数:20954 次

spring与dwr(ajax框架)的结合

首先导入2个包 dwr.jar, common-logging.jar ,然后从dwr的src.zip中找到engine.js 和 util.js 将这两个js文件放入自己项目的js文件夹下。

在web.xml中:

	<servlet>
		<servlet-name>DWRServlet</servlet-name>
		<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
		<init-param>
			<param-name>debug</param-name>
			<param-value>true</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>DWRServlet</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>

同时新建一个applicationContext-dwr.xml文件,作为使用ajax与前端进行交互的类的bean容器。(如果不与spring集成,则忽略该步骤)

在applicationContext-dwr.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
	
	<bean id="DWRRegister" class="com.swu.cateTime.core.web.register.DWRRegister"></bean>
</beans>

?此时,在web-inf目录下,新建一个dwr.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr20.dtd" >

<dwr>
	<allow>
		<create javascript="register" creator="spring">
			<param name="beanName" value="DWRRegister" />
			<include method="isRepeatName"/>
		</create>
		<convert converter="bean" match="com.swu.cateTime.core.vo.common.MessageVO" ></convert>
	</allow>
	
</dwr>

?<convert>标签作为有返回值时,声明返回Bean的标签,<param name="beanName" value="DWRRegister" /> value的值为在applicationContext-dwr.xml注入的类的id。

?

如果不用spring,dwr.xml文件格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr20.dtd" >
	<dwr>
		<allow>
			<create creator="new" javascript="fuck" >
				<param name="class" value="com.dwr.DWRTest"/>
				<include method="say"/>
				<exclude method="show"/>
			</create>
		</allow>
	</dwr>

?<param name="class" value="com.dwr.DWRTest"/> value的内容为类的全限定名。

?

OK,此时我们运行项目,http://localhost:8080/工程名/dwr,进入测试页面,如果测试成功则能正确显示出来需要返回的值。

?

写js页面

首先导入三个js文件

<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/interface/register.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>

第二个为DWR框架根据配置文件自动生成的

?

function checkUsername(){
	var username = document.getElementById("username").value;
	var patrn = [a-zA-Z0-9]{6,12};
	if(!patrn.exec(username)){
            		alert("用户名只能包含6-12个字母或数字");
		document.getElementById("username").focus();
		return false;
	}
	//alert(username);
	register.isRepeatName(username,isRepeatName);
}
?register是在dwr.xml下配置的 javascript="register"
function isRepeatName(m