1、JavaScript的数据类型与Java数据类型的关系
[table]
|JavaScript| Java|
|Array数组| List、Collection、数组|
|Boolean| Boolean|
|Object |Map、Java Bean|
|String| String|
|Date |Date|
|Numbers| Int、double、float等数值|
|XML Dom |Dom|
|undefined| null|
[/table]
2、Java组件的编写和发布以及客户端引用
1)Java组件必须是一个具体类(因为接口、抽象类反射机制无法实例化)
2)实体类必须遵循Java Bean规范即实现Getter和Setter
3)配置文件中Allow部分的Create元素的JavaScript属性的值要唯一
4)如果存在Java Bean需要转换则要配置Allow部分的Convert元素
5)客户端引用业务组件要以dwr/interface/xxx.js的路径引用JS文件
3、典型调用示例和回调函数
在进阶一中我们已经熟悉了简单字符串示例,下面我们来看数组集合类型的示例程序:
JavaBean的源代码:
dwr.xml文件添加代码
jsp页面javascript代码:
[table]
|JavaScript| Java|
|Array数组| List、Collection、数组|
|Boolean| Boolean|
|Object |Map、Java Bean|
|String| String|
|Date |Date|
|Numbers| Int、double、float等数值|
|XML Dom |Dom|
|undefined| null|
[/table]
2、Java组件的编写和发布以及客户端引用
1)Java组件必须是一个具体类(因为接口、抽象类反射机制无法实例化)
2)实体类必须遵循Java Bean规范即实现Getter和Setter
3)配置文件中Allow部分的Create元素的JavaScript属性的值要唯一
4)如果存在Java Bean需要转换则要配置Allow部分的Convert元素
5)客户端引用业务组件要以dwr/interface/xxx.js的路径引用JS文件
3、典型调用示例和回调函数
在进阶一中我们已经熟悉了简单字符串示例,下面我们来看数组集合类型的示例程序:
JavaBean的源代码:
public String[] testArray(){
return new String[]{"世界","你好"};
}
public String[][] testArray2(){
return new String[][]{
new String[]{"A1","A2"},
new String[]{"B1","B2","B3"}
};
}
public List testList(int size){
List list = new ArrayList(size);
for(int i=0; i<size; i++){
list.add("someDAta"+i);
}
return list;
}
public List testList2(){
List list = new ArrayList();
for(int i=0; i<3; i++){
String[] ss = new String[]{"A"+i,"B"+i,"C"+i};
list.add(ss);
}
return list;
}
public Map testMap(){
Map map = new HashMap();
map.put("key1", "世界");
map.put("key2", "你好");
return map;
}
dwr.xml文件添加代码
<create creator="new" javascript="test2">
<param name="class" value="com.dwr.Test2"/>
</create>
jsp页面javascript代码:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/test2.js"></script>
<script type="text/javascript">
function testArray(){
test2.testArray(
function(data){
alert("一维数组的长度是:"+data.length);
for(var i=0; i<data.length; i++){
alert(data[i]);
}
}
);
}
function testList(){
test2.testList(
5,
function(data){
alert("List的长度是:"+data.length);
for(var i=0; i<data.length; i++){
alert(data[i]);
}
}
);
}
function testArray2(){
test2.testArray2(
function(data){
alert("二维数组的长度是:"+data.length);
for(var i=0; i<data.length; i++){
for(var j=0; j<data[i].length; j++){
alert(data[i][j]);
}
}
}
);
}
function testList2(){
test2.testList2(
function(data){
alert("List的长度是:"+data.length);
for(var i=0; i<data.length; i++){
for(var j=0; j<data[i].length; j++){
alert(data[i][j]);
}
}
}
);
}
function testMap01(){
test2.testMap(
function(data){
alert(data.key1);
alert(data["key2"]);
}
);
}
function testMap02(){
test2.testMap(
function(data){
for(var p in data){
alert("key="+p+",value="+data[p]);
}
}
);
}
</script>
</head>
<body>
<a href="#" onclick="testArray()">Test2.testArray</a>
<a href="#" onclick="testList()">Test2.testList</a>
<a href="#" onclick="testArray2()">Test2.testArray2</a>
<a href="#" onclick="testList2()">Test2.testList2</a>
<a href="#" onclick="testMap01()">Test2.testMap - 获取对应key的值</a>
<a href="#" onclick="testMap02()">Test2.testMap - 循环获取一个Map中的key和value</a>
</body>
</html>