dwrとjsonの結合
7228 ワード
権限割り当て認証操作ではdwrを使用しています操作を容易にするために.しかし設定はcheckBoxをクリックするたびにキャラクターの認証を変更しています.後にこの操作はあまりよくないようで大幅な修正を行いました.後にjsonを使ってパラメータを渡すように強要しました..しかし自分で書いたこの方法は汎用性が強くありません..ここではjsonをパラメータとしてデータを渡す過程を説明するだけです...
まず
http://sourceforge.net/projects/json-lib/files/
jsonがjavaバックグラウンドで変換したアシストパッケージをダウンロードします.
このパッケージはJSOnObject json=JSOnObject.fromObject(map)を提供します.
いくつかのオブジェクトをJSOnObjectのオブジェクトに変換します.JSOnObject呼び出しtoString()はjson形式のデータになります.次のテストクラスで効果を見ることができます.
私のプロジェクトjavascriptは内容が多いので、コードを切り取って説明します.
htmlもdom解析を使用するため、javascriptから対応する値を取得するために、いくつかの属性の追加と付与を行うことができます.
1.dwr.の構成
web.xml:
dwr.xml
2.jsonデータを取得して解析するクラスを作成する
3.ページの作成
まとめ:ここではjsonを使うことで、データ転送をより柔軟に行うことができますが、フロントjsの操作データが多すぎることもあります.自分が遭遇した実際の状況を選択します.また、火狐の中でcheckboxのstyleを設定するのは効果がありません.checkboxをクリックして色を設定したい場合は、spanを追加したり、フォントの色を変更したりして効果があります.
まず
http://sourceforge.net/projects/json-lib/files/
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から対応する値を取得するために、いくつかの属性の追加と付与を行うことができます.
1.dwr.の構成
web.xml:
<?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>
dwr.xml
<?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>
2.jsonデータを取得して解析するクラスを作成する
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());
}
}
}
3.ページの作成
<%@ 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>
まとめ:ここではjsonを使うことで、データ転送をより柔軟に行うことができますが、フロントjsの操作データが多すぎることもあります.自分が遭遇した実際の状況を選択します.また、火狐の中でcheckboxのstyleを設定するのは効果がありません.checkboxをクリックして色を設定したい場合は、spanを追加したり、フォントの色を変更したりして効果があります.