一直想尝试Ajax,总是嫌麻烦,偶然发现了dwr,真是豁然开朗啊!记号!
1、下载并导入dwr.jar包
到下载dwr.jar包,加入项目中
2、修改配置文件
修改你的web.xml文件,加入如下内容
<servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
|
新建dwr.xml,输入类似下面的内容
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" ""> <dwr> <allow> <!-- javascript参数设置在js中调用类的名称 param value参数设置对应的后台类名 --> <create creator="new" javascript="UserInfoDAO"> <param name="class" value="com.Hibernate.UserInfoDAO"></param> </create> <create creator="new" javascript="PayRecordDAO"> <param name="class" value="com.Hibernate.PayRecordDAO"></param> </create> <create creator="new" javascript="UserOpenValid"> <param name="class" value="com.struts.action.UserOpenValid"></param> </create> </allow> </dwr>
|
上面的代码在dwr中注册了三个要调用的类,分别叫UserInfoDAO、PayRecordDAO、UserOpenValid,其中dwr、allow是固定用法,每个create对于一个类,javascript配置了类在js中的名称,value中配置了类的实际名称。
3、创建Java类
创建的Java类要求有无参构造方法。
4、在jsp中使用dwr
在
标签中加入
<%pageContext.setAttribute("path", request.getContextPath());%> <script type='text/javascript' src='${path}/dwr/interface/UserOpenValid.js'></script> <script type='text/javascript' src='${path}/dwr/engine.js'></script> <script type='text/javascript' src='${path}/dwr/util.js'></script>
|
这三个.js文件是dwr自动生成的,就按照这个格式引用就行了,${path}的位置看其他的资料都是直接写的项目名称,但我在发布的时候遇到问题,就是在发布环境无法执行dwr,修改出现在这样就可以了。
5、调用服务器上的Java类方法
假设UserOpenValid类的内容如下
public class UserOpenValid { public UserOpenValid() { db = new DbOperate(); } // 判断当前单位是否有重名用户 public boolean userNameExist(String towncode,String username){
} public static void main(String[] args) {
} }
|
在Jsp页面中可以这样调用
// 验证当前单位是否有同名用户 function checkname(){ var towncode=document.all('townCode').value; var username=document.all('name').value;
// 调用服务器上UserOpenValid类的userNameExist()方法,前两个参数是类中方法需要的参数,最后一个参数是为了接收userNameExist()方法返回值的回调函数句柄 UserOpenValid.userNameExist(towncode,username,callbackforusernameexist); }
// 处理userNameExist方法的返回值 function callbackforusernameexist(has){ if(has){ alert('有同名用户'); }
}
|
6、参考文章
http://blog.csdn.net/caterpillar_here/archive/2006/09/06/1186566.aspx
7、常见问题
(1)出现异常javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
解决办法:下载xalan.jar到你的工程里或放在tomcat的commons/lib就可以了:
(2)出现异常javax.servlet.ServletException: Servlet.init() for servlet dwr-invoker threw exception
解决办法:把TOMCAT_HOME/common/endorsed/xml-apis.jar中的xml-parser 删除
阅读(1338) | 评论(2) | 转发(0) |