第一次来JAVA Eye发文章,以前主要在百度、CSDN发,最近经常来这里看文章就顺便注册了一个。这两天一直在公司搞DWR AJAX框架,也是刚学,了解的不是太深。今天星期6闲来无事,就来写写。唉,说了一大堆废话,好了下面进入正题。
DWR框架功能确实挺强大的,感觉使用起来也挺方便的,主要是配置容易出问题,大多数JAVA里面的框架都配置一大堆,这方面感觉太繁琐。要想使用DWR框架得有几个步骤:
一准备
1、下载JAR包
我使用的DWR2.0,所以下载相应的JAR包就行了,一般放到WEB-INF的Lib包下就行了。(当初做的时候,启动TOMCAT时候,出现了错误,说的是缺少日志JAR包,后来就加了commons-logging-1.1.1.jar就没事了,网上看别人用的时候没出现此问题。)
2、接下来就是配置了
首先是配置 web.xml.在web.xml加上
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.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>
这样配置就行了,具体意思,我想你看下就应该明白了。
3 建个dwr.xml配置文件,和web.xml放在一个文件夹下就行了。我用MyEclipse8做的,可以直接新建个XML文件。
这里面主要配置一些有关后台JAVA类的,配置好后,DWR框架就会帮助你生成一些JS文件。详细说明下边再说。
二编码
1、 基本的准备好后就可以开始写JAVA代码了。
class:Book
package com.liang;
public class Book {
private String id;
private String name;
private String pass;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
class: BookList
package com.liang;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
public class BookList {
public List getList( ){
List list=new ArrayList();
Book book=null;
for(int i=1;i<3;i++){
book=new Book();
book.setId("id"+i);
book.setName("name"+i);
book.setPass("pass"+i);
list.add(book);
}
System.out.print(list);
return list;
}
}
这是我当初写的测试代码,一个Book类,一个BookList.我写的这个测试主要用来返回一个List然后用DWR框架在JSP页面循环得到这些数据。BookList里面有个返回List类型的的getList()方法,用来返回后台数据,
实际做开发的时候数据一般都从数据库查出来,自己做下相应的更改就行了。
这两个JAVA类写完后,后台代码基本就OK了,现在最重要的是进行配置了,如何让DWR能够找到这些JAVA类,并执行相应的工作呢。先看看我的dwr.xml配置:
<?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>
<!--
下面这部分配置好后,启动tomcat后会生成一个JS文件,在这里可以自定义JS文件名,
我这样写的: javascript="BookList" 习惯用类名来定义,页面调用JS时候就用这个名字.
value="com.liang.BookList" 这个用来定义你的类所在位置(有包了加包名,不然找不到)。
-->
<create javascript="BookList" creator="new" scope="application">
<param name="class" value="com.liang.BookList"></param>
</create>
<!--
match="com.liang.Book" 这个用来定义实体类的位置(有包了加包名,第一次做的时候忘记加了,
害了我半天时间得不到值),因为我返回List方法中,
里面封转的是Book类型,Book又有自己的属性ID,name等,
JSP页面获得时候就得根据他里面的属性得到值。
value="id,name,pass"这里面主要定义你在JSP页面获得那个属性值时要用到的,
-->
<convert match="com.liang.Book" converter="bean">
<param name="include" value="id,name,pass"/>
</convert>
<!--
下面这个配置主要为了显示异常信息,如果不配置的话,程序中所有的错误,
都只弹出error的对话框,这样我们就看不到详细的错误信息,加大了调试难度,
相对配置的话,就会把Error转换成具体的错误描述来看,就如同你在日志看到异常信息一样。
-->
<convert converter="bean" match="java.lang.StackTraceElement" />
<convert converter="exception" match="java.lang.Exception"/>
</allow>
</dwr>
三JSP页面显示
首先在页面引入
<script type='text/javascript' src='dwr/interface/BookList.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
BookList.js就是在dwr.xml文件配置的,两个名字要对应,路径在:dwr/interface/ 这个目录下都统一的。
下面两个都是DWR自动生成的,里面有一些实现AJAX的函数和一些工具类
然后是我的bookJSP页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<script type='text/javascript' src='dwr/interface/BookList.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<script type="text/javascript">
window.onload=function (){//页面加载时候调用
BookList.getList(callBackMethod);//BookList是BookList.js这个名字,
//getList当然是你自己写的方法名,参数是回调下面的函数,
//这个参数是必须有的, 如果方法里面需要传参数的话,可以在里面加参数
//比如我根据name查询然后返回List可以写成这种, BookList.getList(name,callBackMethod);
}
function callBackMethod(dataList){//dataList可以自定义,是返回的数组名
alert(dataList.length);//显示返回数组值的长度
for(var d in dataList){//循环弹出相关的值,当时我做测试时候写的。
alert("name:"+dataList[d].name);
alert("pass:"+dataList[d].pass);
}
DWRUtil.removeAllRows("table4");//删除table4里面的所有行。DWR里面util.js中的方法。
DWRUtil.addRows("table4",
//循环显示数据并自动增加tr,也是DWR里面util.js中的方法。详细使用说明可以去网上找找
dataList,[function(item){return item.id},
function(item){
return "<a target='_blank' href='index.jsp?id="+item.id+"'>"+item.name+"</a>";//显示一个超连接
},function(item){return item.pass}],{escapeHtml:false} );
}
</script>
</head>
<body>
<table border="1"><tr><td>id</td><td>name</td><td>pass</td></tr>
<tbody id="table4"></tbody>
</table>
</body>
</html>
源文件已经打包好了。
四总结
开发过程也出现了不少问题,
刚开始容易出现,对象不支持此属性或方法,**没有定义 之类的可能是在引入对应的JS文件路径错误,
或者页面方法调用时候 名字写错。其它的就不写了。
写这个主要是做学习记录,刚学DWR,理解不是太深,当中好多可能用词不当,不够详细明白,有错希望大家指正,一起学习进步。
分享到:
相关推荐
在本示例中,我们学习了如何配置DWR,定义可调用的Java方法,以及如何在JavaScript中调用这些方法并处理返回的List数据。这只是一个基础的使用案例,实际上DWR支持更复杂的交互,如异步调用、数据转换、错误处理等,...
5. **列表数据的处理**:一旦服务端的方法执行完成并返回list,DWR会自动将Java对象转换为JavaScript对象。我们需要遍历这个list,并将其数据绑定到HTML元素上,如表格、列表或其他UI组件。这通常使用JavaScript的...
然后,我们需要在DWR配置文件(通常为`dwr.xml`)中声明这个可调用的Java方法,这样DWR才知道客户端可以通过哪些方法与服务器进行交互: ```xml <class>com.example.MyService</class> ``` 在前端JavaScript...
DWR (Direct Web Remoting) 是一种开源的Java库,用于在Web应用程序中实现异步JavaScript和XML(AJAX)通信。...通过上述步骤,你可以配置和使用DWR在JSP页面中调用服务层的方法,实现动态数据的交互。
在这个“dwr入门例子 返回list”中,我们学习了如何使用DWR从服务器获取列表数据,并在客户端进行处理和展示。这只是一个基础示例,实际应用中,DWR还能处理更复杂的交互,如文件上传、实时数据推送等,进一步提升...
在这个场景中,我们关注的是如何在DWR回调函数中处理从服务器返回的`List<Bean>`类型的数据。 首先,我们需要在服务器端定义一个Java方法,该方法会返回一个`List<Bean>`。例如,假设我们有一个名为`User`的Java ...
通过上述示例可以看出,在DWR中处理List、Set和Map等集合类型的关键在于正确配置DWR XML文件,并编写合适的客户端JavaScript代码来调用服务端的方法及处理返回的数据。这种方式大大简化了前后端之间的数据交换过程,...
例如,如果有一个名为`UserService`的服务,里面有一个返回`List`的方法`getUserList()`,那么在`dwr.xml`中会有如下配置: ```xml ``` 然后,在`UserService`类中,我们需要实现`getUserList()`方法,...
DWR会将服务器的响应数据转换为JavaScript可以理解的格式,并在调用的回调函数中返回。你可以在这里处理返回的字符串、对象或列表。 DWR还提供了其他特性,如安全设置、缓存控制、异步和同步调用等,使得它成为...
DWR也支持返回List类型的数据。例如,一个Java方法可能返回一个包含多个实体对象的List,这些对象在JavaScript中将以数组的形式呈现。你可以遍历这个数组并在前端进行展示或操作。 4. **List和Map数据结构**: ...
对于List数据类型,DWR能够将服务器端的ArrayList或LinkedList等转换为JavaScript的Array。在DWR配置文件中,你需要声明允许访问的Java类,例如: ```xml ``` 在这个例子中,`MyClass`的`getListOfObjects`...
在DWR配置文件`dwr.xml`中,你需要创建一个允许JavaScript访问的Java类。以下是一个例子: ```xml <param name="class" value="/com/dwr/TestClass"/> ``` 这段配置暴露了名为`testMethod1`的Java方法...
例如,如果Java方法返回一个`List<String>`,DWR会将其转换为JavaScript数组,每个元素都是字符串类型。 - 在`dwr.xml`中无需特殊配置,只需确保JavaBean中的属性与JavaScript期望的数据类型相匹配。 6. **优化和...
- **配置文件**:`dwr.xml`是DWR的核心配置文件,用于声明Java方法的可调用性以及参数类型等信息。 - **安全性**:由于DWR允许直接调用服务器端方法,因此需要确保只暴露安全的、设计为被调用的方法,防止跨站脚本...
<creator id="script" class="uk.ltd.getahead.dwr.create.ScriptedCreator"/>这种类型的creator采用BSF执行脚本语言并返回bean.例如 ... import org.apache.commons.validator.EmailValidator; return ...
这个小例子展示了如何使用DWR来动态加载下拉框(Dropdown List)的数据,这种技术在网页应用中非常常见,特别是当需要在用户界面加载时就获取并填充数据的场景。 首先,我们需要理解DWR的基本工作原理。DWR允许...
4. **DWR配置** 配置DWR主要包括以下步骤: - 添加DWR库到项目类路径。 - 配置web.xml,定义DWR的Servlet。 - 创建DWR的配置文件dwr.xml,声明可公开访问的Java对象和方法。 - 在服务器端创建Java类和方法,...
通过配置DWR,你可以定义允许的Java方法调用,并利用Ajax技术实现动态交互,如实时验证、分页和级联选择等。在实际项目中,DWR可以帮助开发者提高工作效率,减少不必要的HTTP请求,提升用户体验。
在项目中,我们需要在DWR配置文件(通常为dwr.xml)中定义允许的远程方法,这样JavaScript就能通过DWR引擎调用这些方法,获取服务器端的数据。例如,我们可以定义一个返回list的Java方法: ```xml ``` ...