dwr小例子

   最近在项目中使用了ajax来实现一个三级下拉菜单,同时在用户登录时也用到了ajax,在看同事写的ajax代码时发现他用到了dwr,所以今天抽空学习了一下dwr,写了两个小例子。
 
1、点击“getToday”按钮,在文本框中显示今天的日期;点击“getYesterday”按钮,在文本框中显示昨天的日期。
首先 下载dwr的jar文件,并把他放到你的WEB-INF/lib文件夹下;
然后在web.xml文件中加入以下代码:

<servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <display-name>DWR Servlet</display-name>
        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>false</param-value>
        </init-param>
    </servlet>
  </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>

接着,在于web.xml同级目录下新建dwr.xml文件,并加入下面的代码:

<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr//dwr20.dtd">

<dwr>
  <allow>
    <create creator="new" javascript="Demo">
      <param name="class" value="com.dwrtest.java.GetDate"/>
    </create>
  </allow>
</dwr>

新建页面,我这里使用的是freemarker,换做html和jsp也一样效果,代码如下:

<html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <script src='dwr/interface/Demo.js'></script>
  <script src='dwr/engine.js'></script>
  <script language="javascript">
    function gettoday() {
      Demo.getToday(setMytext);
    }
    function getYesterday() {
      Demo.getYesterday(setMytext);
    }
    function setMytext(str) {
      document.getElementById('mytext').value = str;
    }
  </script>
    <title></title>
  </head>
  <body>
    <input type="button" value="getToday" onclick="gettoday();"/>
    <input type="button" value="getYesterday" onclick="getYesterday();"/>
    <input type="text" value="" name="mytext" id="mytext"/>
  </body>
</html>

java文件GetData.java代码如下:

 

package com.dwrtest.java;

import java.text.SimpleDateFormat;
import java.util.Date;

public class GetDate {

    public String getToday() {
        SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
        Date date = new Date();
        return bartDateFormat.format(date);
    }

    public String getYesterday() {
        SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
        Date date = new Date();
        return bartDateFormat.format(new Date(date.getTime() - 86400000));
    }
}

这样编译以后,启动tomcat就可以看到效果了。

这里的java文件和dwr基本没有什么联系,它的两个方法也不是专门为dwr而写的,显而易见,这两个方法的目的是格式化当天和前一天的时间,并返回他们的String形式。

而在dwr.xml中,我们这样引入了他们,

    <create creator="new" javascript="Demo">
      <param name="class" value="com.dwrtest.java.GetDate"/>
    </create>

这样在javascript中直接使用“Demo”了。

我们可以看到,在页面的js中这样引入了Demo,

<script src='dwr/interface/Demo.js'></script>

gettoday()和getYesterday()中,调用了Demo.getToday(setMytext),意思是将return的值作为setMytext的参数传到setMytext()中。

2、二级的联动菜单,三级、四级都也可以这样做

页面代码:

<html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <script src='dwr/interface/ListTest.js'></script>
  <script src='dwr/engine.js'></script>
  <script src="dwr/util.js"></script>
  <script language="javascript">
    function updateClass() {
      ListTest.getClassList(createClass);
    }
    function createClass(data) {
      DWRUtil.removeAllOptions("classid");
      DWRUtil.addOptions("classid", data);
    }
    function updateUser() {
      ListTest.getUserList(DWRUtil.getValue("classid"),createUser);
    }
    function createUser(data) {
      DWRUtil.removeAllOptions("userid");
      DWRUtil.addOptions("userid", data);
    }
  </script>
    <title></title>
  </head>
  <body onload="updateClass()">
    Class:<select name="classid" id="classid" onchange="javascript:updateUser();"></select><br>
    User:<select name="userid" id="userid"></select>
  </body>
</html>

可以看到,引入了<script src="dwr/util.js"></script>

java文件ListTest.java的代码:

package com.dwrtest.java;

import java.util.LinkedHashMap;
import java.util.Map;

public class ListTest {

    public Map getClassList() {
        Map map = new LinkedHashMap();
        map.put("0", "请选择");
        map.put("1", "班级一");
        map.put("2", "班级二");
        map.put("3", "班级三");
        return map;
    }

    public Map getUserList(String id) {
        Map map = new LinkedHashMap();
        if(id.equals("1")) {
            map.put("1", "同学一");
            map.put("2", "同学二");
            map.put("3", "同学三");            
        } else if(id.equals("2")) {
            map.put("4", "同学四");
            map.put("5", "同学五");
            map.put("6", "同学六");            
        } else if(id.equals("3")) {
            map.put("7", "同学七");
            map.put("8", "同学八");
            map.put("9", "同学九");
        } else {
            map.put("", "请选择");
        }
        return map;
    }
}

最后在dwr.xml中添加下面代码:

<create creator="new" javascript="ListTest">
      <param name="class" value="com.dwrtest.java.ListTest"/>
    </create>

这样,二级的联动就做好了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值