因为要实现局部刷新的功能,我就选择了Dwr,项目环境是 :Struts2+Spring2.5+Hibernate3.0+Dwr2.0,导入dwr.jar包到lib目录下。
首先web.xml中配置dwr
<!-- 配置DWR -->
<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>
<init-param>
<param-name>config_dwr</param-name>
<param-value>/WEB-INF/dwr.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<!-- DWR结束 -->
然后编写的dao,service的方法,我想调用的是service层的方法。
我使用了dwr.xml配置调用service配置如下:
<?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="spring" javascript="yservice">
<param name="beanName" value="YonghushuxingService"/>
<include method="checkName"/>
</create>
</allow>
</dwr>
其中YonghushuxingService是在Spring中定义的Id名称。
最后我在JSP页面调用
<script type="text/javascript" src="dwr/interface/yservice.js"/>
<script type="text/javascript" src="dwr/engine.js"/>
<script type="text/javascript" src="dwr/util.js"/>
<script lang="javascript">
function xuanze()
{
var uname1=document.myForm.elements["yonghuming"].value;
yservice.checkName(uname1,callback)
}
function callback(data)
{
if(data)
{
alert('用户名可以使用');
}else
{
alert('用户名已存在');
}
}
</script>
配置是没有问题的,可是就是不出来结果,我都改配置改了好多遍了,而且我也测试了一下Service里面的方法,是能够连接数据库实现的,而且进入dwr测试也能测试成功,就是JSP页面上不行,报警告错误对象不支持此属性和方法,缺少对象。我纠结啊。后来我从写了一下
<script type="text/javascript" src="dwr/interface/yservice.js"/>
<script type="text/javascript" src="dwr/engine.js"/>
<script type="text/javascript" src="dwr/util.js"/>
写成<script type="text/javascript" src="dwr/interface/yservice.js"></script>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"/></script>
在进行测试居然成功了,Struts2 中的JS页面标签必须是成对出现的才行。至此问题解决了。