Messageの中身を表示する

メッセージのリスト表示まで出来たので、リストからクリックで選択するとメッセージの中身を見る事ができる様にしたいと思います。


まずはサーバ側の実装から。
プライマリキーがクライアントから飛んでくるという仕様で、Messageオブジェクトをフェッチします。

MessageService.java(抜粋)

/**
 * PrimaryKeyにより該当するメッセージオブジェクトを返します。
 */
public MessageBean getMessageByPk(int pk) {
	System.out.println("getMessageByPK INVOKED pk=" + pk);
	DataContext context = 
		Configuration.getSharedConfiguration().getDomain().createDataContext();
	Message result = (Message) DataObjectUtils.objectForPK(context, Message.class, pk);
	System.out.println(result);
	return result.getMessageBean();
}

DataObjectUtils.objectForPK()を呼べば一発です。


次にクライアント側を実装します。
まずはお決まりのRemoteObjectまわりのセットをします。

bbx.mxml(抜粋)

function getMessageByPk_result(event):Void {
	currentMessage = event.result;
}
<mx:method name="getMessageByPk"
	result="getMessageByPk_result(event)" fault="handleFault(event)"/>


Treeのアイテムをクリックすると、changeというイベントが発生し、選択されたオブジェクトがevent.target.selectedItemに格納されるというような事がドキュメントに書いていましたので、早速実装です。
まず、Treeのchange属性を追加します。

bbx.mxml(抜粋)

<mx:Tree id="summaryTree" heightFlex="1" width="200" change="handleTreeChange(event)" 
	styleName="treeStyle" dataProvider="{summaryList}"/>

handleTreeChange()の実装はこうなります。

bbx.mxml(抜粋)

function handleTreeChange(event):Void {
	var pk = event.target.selectedItem.attributes.data;
	remote.getMessageByPk(parseInt(pk));
}

TreeにはXMLのfirstChildがセットされています。
したがって、event.target.selectedItemは必然的にXMLのnodeということになります。プライマリキーはXMLのdataという属性に入れてましたので、attributes.dataという記述の仕方になります。
parseInt()は文字どおり、文字列をint(ActionScriptでいえばNumber)に変換する関数です。


実行すると、Treeのアイテムをクリックすると、右側にメッセージの内容が表示される様になりました。