Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第3部 Webアプリケーションの開発> 第15章 UJIタグを使ったプログラミング> 15.5 タグによるXMLデータの利用

15.5.1 基本的な使用方法

画面部品タグやコンポーネントタグでは、通常のデータBeanと同様にXMLデータBeanを使用することができ、XMLデータを表示したり、入力データでXMLを更新したりすることが可能です。XML内のどのデータをタグで使用するかは、XPathを使って指定します。 以下のタグでXMLデータが利用できます。

タグ 機能
uji:table 表形式のデータを画面に展開
uji:tree ツリー構造のデータを画面に展開
uji:list リスト形式のデータを画面に展開
uji:switch 条件によって異なる画面を展開
uji:composite XMLデータBeanの一部の取り出し
uji:compositeName XMLデータBeanの一部を更新するための入力項目名を生成
uji:value 画面展開中の値を表示
uji:getProperty XML要素の内容を表示
uji:name 画面展開中のデータを更新するための入力項目名を生成
uji:input クライアントスクリプトを記述する場合にHTMLのINPUTタグの代わりに使用
uji:textarea クライアントスクリプトを記述する場合にHTMLのTEXTAREAタグの代わりに使用
uji:select クライアントスクリプトを記述する場合にHTMLのSELECTタグの代わりに使用
uji:fieldString 文字列入力フィールド
uji:fieldEJString 外字対応文字列入力フィールド
uji:fieldLong 整数入力フィールド
uji:fieldDouble 実数入力フィールド
uji:fieldBigInteger 十進整数入力フィールド
uji:fieldBigDecimal 十進数入力フィールド
uji:fieldDate 日付・時刻入力フィールド
uji:fieldTextArea 複数行テキスト入力フィールド
uji:checkBox チェックボックス
uji:radioButton ラジオボタン
uji:pushButton プッシュボタン
uji:anchor アンカー
uji:comboBox コンボボックス
uji:listBox リストボックス
uji:buttonList ボタンリスト
uji:recordView レコードビュー
uji:tableView テーブルビュー
uji:treeView ツリービュー
注意
次のいずれかのタグを使用してXMLデータの更新を行う場合、XMLデータに名前空間を使用することはできません。
注意
uji:fieldEJStringタグでXMLデータを利用し、かつ、Fujitsu XML プロセッサを使用する場合は、XMLデータの文字コードに以下のどちらかを使用してください。

以下のXMLを例にして、基本的な入出力の方法を説明します。

・XML(catalog.xml)
<?xml version="1.0" encoding="iso-2022-jp" ?>
<catalog>
  <item>
    <name>赤ワイン</name>
    <content>1000ml</content>
  </item>
  <price>2000</price>
</catalog>

このXMLデータのname要素を表示し、price要素の内容を入力するアプリケーションを例として説明します。ビジネスクラスでは、XMLデータBeanを作成します。以下の例では、XMLをWEB-INFフォルダ直下に置いたファイル"catalog.xml"から読み込み、作成したXMLデータBeanに"body"という名を付けています。

・ビジネスクラス

import java.io.File;
import java.io.BufferedInputStream;
import java.io.FileInputStream; import javax.servlet.ServletContext; import com.fujitsu.uji.DispatchContext;
import com.fujitsu.uji.http.HttpDispatchContext; import com.fujitsu.uji.xml.XmlDataBean; .... public void startup(DispatchContext context) { try { // ロードするファイルを表すFileオブジェクトを作成 ServletContext sc = ((HttpDispatchContext)context).getServletContext(); String root = sc.getRealPath("/"); File file = new File(root, "/WEB-INF/catalog.xml"); // XMLデータBeanを作成 XmlDataBean xmlBean = new XmlDataBean(); // XMLデータを読み込み BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); xmlBean.loadFrom(in); // 出力するデータBeanを設定 context.setResponseBean("body", xmlBean); } catch (Exception e) { e.printStackTrace(); } } ....

入出力ページでは、name要素の表示にはuji:getPropertyを、price要素の入力にはuji:fieldStringを使用します。以下は入出力ページの例です。

・入出力ページ
<%@ page contentType="text/html; charset=shift_jis" %>
<%@ taglib uri="uji-taglib" prefix="uji" %>
<uji:useBean id="body" cls="com.fujitsu.uji.xml.XmlDataBean" request="true" />
<form method="post"> <input type="hidden" name="uji.id" value="body"> <input type="hidden" name="uji.verbs" value="update"> 商品情報<br> 品名: <uji:getProperty bean="body" xpath="item/name"/> <br> 価格: <uji:fieldString bean="body" xpath="price"/>円 <br> <input type="submit" name="update" value="更新"> </form>

uji:getPropertyタグで表示するXMLデータの要素を指定するには、タグのbeanアトリビュートとxpathアトリビュートを使用します。beanアトリビュートにはXMLデータBeanに付けた名前を指定します。そのXMLデータBean内のどの要素を表示するかは、xpathアトリビュートにXPathで指定します。このXPathは、beanアトリビュートで指定したXMLデータBeanのルート要素からの相対パスで指定します。

uji:getpropertyタグでのxmlデータbeanの使用

ポイント
xpathアトリビュートを省略した場合には、beanで指定したXMLデータBeanのルート要素がタグで使用されます。beanアトリビュートを省略した場合は、カレントオブジェクトが代わりに使用されます。

注意
XMLデータBean使用時は、コマンドマップとページマップの書き方が通常とは異なります。詳しくは関係定義ファイルの書き方を参照してください。

ブラウザの表示は次のようになります。

xmlデータbeanを使用した基本的なフォーム

文字列入力フィールドやテキストエリアなどの入力部品用のタグでXMLデータを使用すると、入力されたデータでXMLが更新されます。上記の例ではuji:fieldStringがprice要素を使用しています。したがって、ブラウザで"5250"と入力して更新ボタンを押すと、XMLデータBean内のprice要素が更新されて次のようになります。

フォームに5250と入力
・XML(catalog.xml)
<?xml version="1.0" encoding="iso-2022-jp" ?>
<catalog>
  <item>
    <name>赤ワイン</name>
    <content>1000ml</content>
  </item>
  <price>5250</price>
</catalog>

■フォームに必要なリクエストパラメタ

フォームを作成する際は、通常のデータBeanを利用した場合と同様に、必要に応じてリクエストパラメタuji.id、uji.verbsが送信されるようにしてください。<input type="hidden">タグを記述することによってこれらのリクエストパラメータを送信させることができます。新規作成したXMLデータBeanに入力データを格納する場合は、リクエストパラメタuji.bean、uji.xmlBeanの値を以下のように与えてください。

<form method="post">
  <input type="hidden" name="uji.bean" value="com.fujitsu.uji.xml.XmlDataBean">
  <input type="hidden" name="uji.xmlBean" value="catalog">
  <input type="hidden" name="uji.verbs" value="add">
  商品情報<br>
  品名: <uji:getProperty bean="body" xpath="item/name"/> <br>
  価格: <uji:fieldString bean="body" xpath="price"/>円 <br>
  <input type="submit" name="add" value="追加">
</form>

関係定義ファイルの書き方

XMLデータBeanを使う場合は、コマンドマップとページマップの書き方が通常とは異なります。データBeanのクラス名(com.fujitsu.uji.xml.XmlDataBean)の代わりにXMLデータBeanのルート要素の要素名を使い、その要素名の先頭に"/"を付加します。ルート要素が"catalog"であるXMLデータBeanを使った例を示します。

・コマンドマップ
/catalog;add=sample.CatalogHandler.add
・ページマップ
/catalog;=catalogForm.jsp

■複数のデータの組を扱うタグ

以下は、リストやテーブルなどの複数のデータの組を必要とするタグです。これらのタグでXMLデータを利用するには、それぞれのタグに合わせた構造のXMLを使用する必要があります。

タグ 説明
uji:comboBox コンボボックス
uji:listBox リストボックス
uji:buttonList ボタンリスト
uji:recordView レコードビュー
uji:tableView テーブルビュー
uji:treeView ツリービュー
uji:table 表形式のデータを画面に展開
uji:list リスト形式のデータを画面に展開
uji:tree ツリー構造のデータを画面に展開

各タグが必要とするXMLデータの構造はUJIタグリファレンスを参照してください。ここでは、uji:comboBoxを例にしてXMLデータの表示方法、入力方法、必要となるXMLデータの構造を説明します。

以下は、コンボボックスを表示するのに必要なXMLデータとタグの例です。

・表示されるコンボボックス
コンボボックス

・XML
<root>
  <selected>野球</selected>
  <sports>
    <data>野球</data>
    <data>サッカー</data>
    <data>テニス</data>
  </sports>
</root>
・タグ
<uji:comboBox bean="body" xpath="sports" selectedXPath="selected"/>

コンボボックスの選択肢として表示されるデータはuji:comboBoxのxpathアトリビュートで指定します。xpathで指定した要素の子要素がそれぞれ選択肢として使用されます。上記の例では、sports要素内のdata要素3個が選択肢になります。

selectedXPathアトリビュートは、選択状態の保存先となる要素をXPathで指定します。この指定はbeanアトリビュートで指定したXMLデータBeanのルート要素からの相対指定です。上記の例では、selected要素が保存先となります。リクエスト処理時には、コンボボックスで選択された選択肢の表示文字列によってselected要素の内容が書き換えられます。画面表示時には、デフォルトで選択されている選択肢としてselected要素の内容が使われます。

uji:comboboxタグでのxmlデータbeanの使用

コンボボックスに表示される文字列と、selectedXPathで指定した要素に保存される文字列を別にしたい場合は、uji:comboBoxのvalueAttrアトリビュートを使います。選択肢となる要素の属性名をvalueAttrに指定すると、その属性の値が選択状態の保存時に使われます。上記の例で「野球」が選択されたときにselected要素に「baseball」が保存されるようにするには、以下のように記述します。

・XML
<root>
  <selected>baseball</selected>
  <sports>
    <data code="baseball">野球</data>
    <data code="soccer">サッカー</data>
    <data code="tennis">テニス</data>
  </sports>
</root>
・タグ
<uji:comboBox bean="body" xpath="sports" 
                 selectedXPath="selected" valueAttr="code"/>

選択された要素の属性に選択状態を保存するには、selectedXPathで@に続けて属性名を記述します。前述のコンボボックスで、「野球」が選択されたときに要素"<data>野球</data>"のselected属性の値がtrueになるようにするには、以下のように記述します。

・XML
<root>
  <sports>
    <data selected="false">野球</data>
    <data selected="true">サッカー</data>
    <data selected="false">テニス</data>
  </sports>
</root>
・タグ
<uji:comboBox bean="body" xpath="sports" selectedXPath="@selected"/>

xpathアトリビュートやselectedXPathアトリビュートで指定する要素は、以下の条件を満たす必要があります。

注意
uji:comboBoxに限らず、どのタグでも使用する要素は複合要素または単純要素です。混合要素を使用するタグはありません。

ポイント
uji:comboBoxのように項目クラスが必須となるタグでも、XMLデータBeanを使用する場合は項目クラスが必須ではありません。ただし、項目クラスを使用した方が性能が上がります。また項目クラスを使用して表示属性などを動的に変更することも可能です。項目クラスでXMLを利用する方法についてはXML用の項目クラスを参照してください。

■指定した要素が存在しない場合の動作

xpathアトリビュートで指定された要素や、selectedXPathアトリビュートで指定された要素または属性が存在しなかった場合、データの表示と更新は次のように実行されます。


目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2005