Chinaunix首页 | 论坛 | 博客
  • 博客访问: 893315
  • 博文数量: 282
  • 博客积分: 10843
  • 博客等级: 上将
  • 技术积分: 2435
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-01 15:23
文章分类

全部博文(282)

文章存档

2013年(1)

2012年(18)

2011年(14)

2010年(30)

2009年(48)

2008年(55)

2007年(55)

2006年(61)

分类: 系统运维

2008-11-18 14:50:17

    一直想尝试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) |
给主人留下些什么吧!~~

chinaunix网友2008-11-19 12:20:33

效果的事留给专业的做吧,我这美术细胞是做不了的,多好的笔搁我手里也白搭

chinaunix网友2008-11-18 22:42:54

dwr还真用过一点,只不过是调用一下后台的业务逻辑,没用它做过页面效果, 觉得extjs作的效果挺眩