dwr和json的结合

在权限分配认证操作中使用了dwr为了方便操作.但是设置是每次点击checkBox就会改变角色的认证...后来老总说这个操作好像不大好进行了大幅度的修改.后来逼着使用json来传递参数..不过自己写的这个方法通用性不强..这里只是讲解下利用json作为参数传递数据的过程吧...
首先到[url]http://sourceforge.net/projects/json-lib/files/[/url]
下载json在java后台转换的辅助包.
这包提供了 JSONObject json = JSONObject.fromObject(map);
将一些对象转换为JSONObject的对象.JSONObject调用toString()将会变成json格式的数据.下面有个测试类可以看看效果

package ajax.json.start;

import junit.framework.Assert;
import net.sf.json.JSONArray;

import org.junit.Test;

public class ArrayTestCase {

private String string = "[true,false,true]";
private boolean[] array = new boolean[] { true, false, true };

@Test
public void testToJson() {
JSONArray json = JSONArray.fromObject(array);
String s = json.toString();
Assert.assertEquals(string, s);
}

@Test
public void testToArray() {
JSONArray json = JSONArray.fromObject(string);
Object[] objs = (Object[]) JSONArray.toArray(json);
for (int i = 0; i < array.length; i++) {
Assert.assertEquals(((Boolean) objs[i]).booleanValue(), array[i]);
}
}
}



由于我的项目javascript内容比较多.我就截取一些代码进行说明
由于html也是使用dom解析的..所以我们可以在其上面进行一些属性添加和赋值再从javascript中获取到相应的值

[b]1.配置dwr.[/b]
[color=darkred]web.xml:[/color]

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
<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>
</web-app>

[color=darkred]dwr.xml[/color]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<!--new: 用Java的new关键字创造对象。 -->
<create creator="new" javascript="test">
<param name="class" value="com.json.Test"/><!--对应的类-->
</create>
<convert match="com.json.SubBean" converter="bean"><!--传输的对象.这里没有使用到.就做到解析-->
<param name="include" value="id,name"></param>
</convert>

</allow>
</dwr>

[b]2.编写获取json数据进行解析的类[/b]

package com.json;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


public class Test {
public void saveOrUpdate(String jsonArray) {
JSONArray json = JSONArray.fromObject(jsonArray);//获取到数组字符串进行转换数组对象
Object[] objs = (Object[]) JSONArray.toArray(json);//转换为数组
for (int i = 0; i < objs.length; i++) {
JSONObject obj = JSONObject.fromObject(objs[i]);//存放的数据进行对象转换
SubBean subBean = (SubBean) JSONObject.toBean(obj,SubBean.class);//转换为相应的对象进行参数的提取
System.out.println("SubBean id:"+subBean.getId()+"name:"+subBean.getName());
}
}
}


[b]3.页面的编写[/b]

<%@ page pageEncoding="gb2312" contentType="text/html; charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>check</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/dwr/engine.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/dwr/util.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/dwr/interface/test.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/json2.js"></script>
<script type="text/javascript">
var temp = [];//临时存放json对象的数组.因为浏览器兼容问题最好使用[]
function saveOrUpdate(field) {
var subBean = {id:"",name:""};//SubBean对应的json形式
subBean.id = parseInt(field.id);//因为SubBean的id是整型的.所以要先做转换才能正确的赋值.其他类型也一样操作
subBean.name = field.getAttribute("name");//对于自己添加到属性因为浏览器兼容问题要统一使用getAttribute()。
temp.push(subBean);
}
function referData(){
test.saveOrUpdate(JSON.stringify(temp));//将存放json对象的数组变成字符串形式进行添加到后台.
}
</script>
</head>

<body>
<table>
<tr>
<td>
<span id="C_Color"><input type="checkbox" id="0" onclick="saveOrUpdate(this)" name="C"></span>C
<span id="R_Color"><input type="checkbox" id="1" onclick="saveOrUpdate(this)" name="R"></span>R
<span id="U_Color"><input type="checkbox" id="2" onclick="saveOrUpdate(this)" name="U"></span>U
<span id="D_Color"><input type="checkbox" id="3" onclick="saveOrUpdate(this)" name="D"></span>D
</td>
</tr>
<TR align="center">
<TD colspan="3" bgcolor="#EFF3F7">
<input type="button" class="MyButton"
value="提交数据" onclick="referData()">
<input type="button" class="MyButton"
value="关闭窗口" onclick="closeWindow()">
</TD>
</TR>
</table>
</body>
</html>



[color=darkred]总结:这里使用json使得一些数据传输可以更灵活的使用.不过也导致了前台js操作数据过多.对自己所遇到的实际情况进行选择...还有在火狐中checkbox的style设置颜色是没有效果的.所以在点击checkbox想设置颜色的话.就加个span上去或者修改字体颜色达到效果[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值