1) はじめに
JSONとはJavaScript Object Notationの略称です。
JavaScriptで評価されるオブジェクトは全てJSON形式で扱われ、XMLHttpRequestもこの形式をサポートしています。
Weberフレームワークは、サーバで処理した結果をJSON形式のオブジェクトで返す
ことができます。
ここではサーバで生成したオブジェクトからJSON形式に変換するサンプルについてご紹介します。
ここで紹介するWebアプリケーションの構成は以下のとおりです
2) 入力画面の作成 (rss2.html)
まず入力となる画面を作成します。
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>Ajax Sample1</title>
<style type="text/css">
#items {background-color: #ccffcc}
</style>
<script language="JavaScript" src="./../../js/xmlhttp.js"></script>
<script type="text/javascript">
//<![CDATA[
var httpObj;
var objID;
function reqItems(arg){
objID = arg;
httpObj = createXMLHttpRequest(displayData);
httpObj.open("GET", "./html_4_0/json/sample.wb");
httpObj.send(null);
}
function displayData(){
var data;
var resultData = "<p><table border='1'>";
if (httpObj.readyState == 4 && httpObj.status == 200) {
data = eval("("+httpObj.responseText+")");
for(var i=0; i<data.item.length; i++)
{
var iCode = data.item[i].itemCode; // 商品コード
var iName = data.item[i].itemName; // 商品名
var iPrice = data.item[i].itemPrice; // 商品価格
resultData += "<tr><th>"+iCode+"</th><td>"+iName+"</td><td>"+iPrice+"円</td></tr>";
}
resultData += "</table></p>";
//alert(resultData);
document.getElementById(objID).innerHTML = resultData;
}
}
//]]>
</script>
</head>
<body>
<h1>JSONのデータを表示する2</h1>
<p>JSONのデータを読み込み表示します</p>
<input type="button" value="jsondataを読み込み" onClick="reqItems('outArea'); return false;"/><br/>
<div id="outArea"></div>
</body>
</html>
3) バリュークラスの作成(Computer.java)
Itemクラスは、クライアントに返す情報の型を定義しています。
このクラスはPOJOでなければなりません。
package weber_4_0_sample.org.itscool.json;
public class Item {
private int itemCode;
private String itemName;
private int itemPrice;
public int getItemCode() {
return itemCode;
}
public void setItemCode(int itemCode) {
this.itemCode = itemCode;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public int getItemPrice() {
return itemPrice;
}
public void setItemPrice(int itemPrice) {
this.itemPrice = itemPrice;
}
}
4) アクションクラスの作成(RssXmlSampleAction.java)
このサンプルのアクションクラスです。
package weber_4_0_sample.org.itscool.json;
import org.itscool.commons.document.BeanToJsonDocument;
import org.itscool.weber.action.Action;
import org.itscool.weber.action.ActionBucket;
import org.itscool.weber.controller.Globals;
public class JsonSampleAction extends Action {
public static final String LINE=System.getProperty("line.separator");
public String doExecute(ActionBucket bucket)throws Exception{
Item item = new Item();
BeanToJsonDocument beanToXml = new BeanToJsonDocument("item");
item.setItemCode(91);
item.setItemName("塩ラーメン");
item.setItemPrice(300);
beanToXml.addElement(item);
item.setItemCode(94);
item.setItemName("味噌ラーメン");
item.setItemPrice(290);
beanToXml.addElement(item);
String text = beanToXml.parseText();
System.out.println(text);
bucket.print(text);
return Globals.RET_NOFORWARD;
}
}