dwrとjsonの結合


権限割り当て認証操作ではdwrを使用しています操作を容易にするために.しかし設定はcheckBoxをクリックするたびにキャラクターの認証を変更しています.後にこの操作はあまりよくないようで大幅な修正を行いました.後にjsonを使ってパラメータを渡すように強要しました..しかし自分で書いたこの方法は汎用性が強くありません..ここではjsonをパラメータとしてデータを渡す過程を説明するだけです...
まず
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を追加したり、フォントの色を変更したりして効果があります.