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>

你可能感兴趣的:(java,Web,Ajax,xml,DWR)