OpenLaszloアドバンスド・テクニック(2) Page 3/3
Webアプリと連携するためのコーディング基礎
ネットエイト
小野 圭二
2006/5/9
■データのバインド例
次に、取得したデータを各コンポーネントにバインドする方法を示します。まずはローカルデータを使ってコンポーネントにバインドしてみます。バインドには<datapath>を使います。使用するコンポーネントによって<datapath>の指定方法が異なりますので、使用に際してはリファレンスマニュアルをよく確認してください。ここではよく使われるコンポーネントへのバインドを例に取ります。
リスト9の<combobox>と<list>を見れば分かるように、実際にデータを描写しているのは<textlistitem>です。<combobox>も<list>も<textlistitem>を「どう表示するか」という機能になっています。
<?xml version="1.0" encoding="UTF-8" ?>
<canvas>
<dataset name="servertest">
<resultset>
<result state="ok" data1="データ1"/>
<result state="ok" data1="データ2"/>
</resultset>
</dataset>
<simplelayout axis="x" spacing="5"/>
<!-- text -->
<view>
<simplelayout/>
<text datapath="servertest:/resultset/result/@data1"/>
</view>
<!-- Grid -->
<grid height="100" datapath="servertest:/resultset">
<gridcolumn>データ1
<text datapath="@data1"/>
</gridcolumn>
</grid>
<!-- List -->
<list>
<textlistitem datapath="servertest:/resultset/result"
text="$path{'@data1'}"/>
</list>
<!-- Combobox -->
<combobox>
<textlistitem datapath="servertest:/resultset/result"
text="$path{'@data1'}"/>
</combobox>
</canvas> |
リスト9 データをコンポーネントにバインドする方法 |
さて、ここまででお気付きでしょうが、OpenLaszloではXML形式のデータをクライアント/サーバ間で使用するため、このサンプルのように<dataset>でデータの形を決めておけば、クライアントとサーバでそれぞれ分離して開発やテストが行えます。クライアントであるLZXアプリケーションは、サーバから送られてくるであろうXMLデータを上記のリスト9のように直接アプリケーション内に記述するか、もしくは外部にXMLファイルとして持ち、これを読み込むように設定します。
外部ファイルの読み込み方法
XML形式のservertest.xmlがservertest.lzxと同じパスに配置されているなら、
<dataset name="servertest" src="servertest.xml"/> |
と書けばよいのです。この場合のservertest.xmlは以下のとおりです。
<resultset>
<result state="ok" data1="データ1"/>
<result state="ok" data1="データ2"/>
</resultset> |
そして、サーバサイドプログラムとの結合試験の前に、この<dataset>をサーバサイドプログラムに変えてやればいいのです。
最後にこのプログラムの実行画面(図3)とサンプルソースコード(リスト10、リスト11)を掲載します。
|
図3 servertest.lzxの実行結果
(画像をクリックすると拡大します)
|
<?xml version="1.0" encoding="UTF-8" ?>
<canvas debug="true">
<!--
<dataset name="servertest">
<resultset>
<result state="ok" data1="データ1"/>
<result state="ok" data1="データ2"/>
</resultset>
</dataset>
-->
<dataset name="servertest" src="http:jsp/servertest.jsp"/>
<alert name="al"/>
<datapointer xpath="servertest:/resultset[1]/result[1]">
<method event="ontimeout">
this.alcall( "タイムアウト" );
</method>
<method event="onerror">
this.alcall( "エラー" );
</method>
<method event="ondata">
<![CDATA[
var resultChk = this.xpathQuery( '@state' );
Debug.write( "resultChk: " + resultChk );
if( resultChk == "ok" ){
parent.comp.setVisible( true );
this.alcall( "成功" );
}else{
this.alcall( "残念" );
}
]]>
</method>
<method name="alcall" args="s">
parent.al.setAttribute( "text", s );
parent.al.open();
</method>
</datapointer>
<simplelayout axis="x" spacing="5"/>
<view y="10">
<simplelayout/>
<edittext name="ed"/>
<button>GET送信
<method event="onclick">
var ed = parent.ed.getText();
Debug.write( "ed: " + ed );
var d = canvas.datasets.servertest;
var p = new LzParam();
p.addValue( "ed", ed, true );
d.setQueryString( p );
d.doRequest();
</method>
</button>
</view>
<view name="comp" y="10" visible="false" bgcolor="0xffeeaa">
<simplelayout axis="x" spacing="5"/>
<!-- text -->
<view>
<simplelayout/>
<text datapath="servertest:/resultset/result/@data1"/>
</view>
<!-- Grid -->
<grid height="100" datapath="servertest:/resultset">
<gridcolumn>データ1
<text datapath="@data1"/>
</gridcolumn>
</grid>
<!-- List -->
<list>
<textlistitem datapath="servertest:/resultset/result"
text="$path{'@data1'}"/>
</list>
<!-- Combobox -->
<combobox>
<textlistitem datapath="servertest:/resultset/result"
text="$path{'@data1'}"/>
</combobox>
</view>
</canvas> |
リスト10 servertest.lzx |
<%@ page language="java" contentType="text/xml; charset=UTF-8" %>
<%
String state = "ok";
String ed = ( String )request.getParameter( "ed" );
if(( ed == null )||( ed.length() == 0 )) state = "ng";
%>
<resultset>
<result state="<%= state %>" data1="データ1"/>
<result state="<%= state %>" data1="データ2"/>
</resultset> |
リスト11 servertest.jsp |
今回はOpenLaszloとサーバサイドアプリケーションとのデータ連携を解説しました。次回からは、いよいよ実践的なアプリケーション開発に入ります。(次回に続く)
|
3/3 |
|
INDEX |
OpenLaszloアドバンスド・テクニック(2)
Webアプリと連携するためのコーディング基礎 |
|
Page1
はじめに
Openlaszloの配備方法
サーバ連携で取り扱うデータ形式 |
|
Page2
LZXアプリケーションからサーバへのデータ送信方法
サーバからのデータの受け方 |
|
Page3
データのバインド例 |