“29.2 電子フォームの表示”で説明したアプリケーションに以下を追加します。
コマンドマップでは、入力したデータの電子フォーム名、ボタン名に対応付けてデータを受けるビジネスクラス名、メソッド名を以下の形式で指定します。
/[電子フォーム名];[ボタン名]=[ビジネスクラス名].[メソッド名]
以下は記述例です。
#commands.map ;=FormSampleHandler.startup /SampleForm;send=FormSampleHandler.onSend
ビジネスクラスにデータを受けるメソッドを追加します。 このメソッドで、電子フォームに入力されたデータの取得、データの処理、次に表示する電子フォームの設定を行います。
import com.fujitsu.uji.DispatchContext; import com.fujitsu.uji.GenericHandler; import com.fujitsu.uji.formc.FormDataBean; import com.fujitsu.uji.xml.XmlDataBean; ... public class FormSampleHandler extends GenericHandler { public Object startup(DispatchContext context) { ... return formBean; } public Object onSend(DispatchContext context, FormDataBean dataBean) { // 電子フォームからXMLを取得します。 XmlDataBean inData = dataBean.getData(); // 入力データを取得します。 String text1 = inData.getText("text1"); String text2 = inData.getText("text2"); // 次の画面を表示するため、FormDataBeanを作成します。 FormDataBean nextFormBean = new FormDataBean("NextForm"); // 出力データの雛形XMLを取得します。 XmlDataBean outData = nextFormBean.getTemplateData(context); // 出力データを設定します。 outData.setText("text1", text1); outData.setText("text2", text2); nextFormBean.setData(outData); // 次画面のFormDataBeanを返却します。 return nextFormBean; } }
電子フォームで使用するデータは、XMLデータBean (XmlDataBeanクラス) を使って取得や設定を行います。XMLデータBeanは、XMLのデータを保持するオブジェクトです。XMLデータBeanの使用方法の詳細は“6.2 XMLデータBean”を参照してください。
電子フォームに入力されたデータを取得するには、以下のようにします。
メソッドの引数であるFromDataBeanクラスのgetDataメソッドでXMLデータBean (XmlDataBeanクラス) を取得します。このXMLデータBeanに電子フォームに入力されたデータが格納されています。
XMLデータBeanのgetTextメソッドで、電子フォームのデータを取得します。getTextメソッドの引数には取得するデータをXPathで指定します。
表示する電子フォームにデータを設定するには、以下のようにします。
FormDataBeanクラスのgetTemplateDataメソッドで、XMLデータBeanを取得します。
XMLデータBeanのsetTextメソッドで、電子フォームのデータを設定します。setTextメソッドの引数には設定対象をXpathで指定します。
取得または設定するデータは、電子フォームの構造に従って指定します。上記のソースは、以下の構造のタグに対応します。
DataRoot +- text1 +- text2
集団項目で階層構造になっている場合は、途中のパスを指定します 。以下は階層構造を持ったデータの例です。
DataRoot +- group1 +- text1 +- text2
この構造の場合は、以下のようなソースになります。
String text1 = inData.getText("group1/text1"); String text2 = inData.getText("group1/text2");
繰り返し構造となる場合は、タグ名にインデックスを付けて指定します。以下は繰り返し構造を持ったデータの例です。
DataRoot +- item | +- text1 | +- text2 +- item : :
この構造の場合は、以下のようなソースになります。 インデックスは1から始まります。
//最初のitem内のデータを取得 String text1 = inData.getText("item[1]/text1"); String text2 = inData.getText("item[1]/text2"); //2番目のitem内のデータを取得 String text1 = inData.getText("item[2]/text1"); String text2 = inData.getText("item[2]/text2");
階層構造の一部を別のXMLデータBeanとして取得することで、データの取得時や設定時にXPathの指定が簡単になります。
XmlDataBean item = inData.getSubBean(item[1]); String text1 = item.getText("text1"); String text2 = item.getText("text2");
FormDataBeanクラスのgetTemplateDataメソッドは、出力データの雛形となるXMLを作成し、そのXMLを格納したXMLデータBeanを返却します。この雛型の代わりに、すでに保存されたXML等を利用することも可能です。この場合は、以下の手順で処理を行います。
XMLデータBeanを新規に作成し、出力データを格納します。XMLファイルを読み込んで格納するには、XmlDataBeanクラスのloadFromメソッドを使います。
作成したXMLデータBeanをFormDataBeanクラスに与えます。FormDataBeanのsetDataメソッドを使います。
次のソースは、他のXMLを利用する例です。
// 次の画面を表示するため、FormDataBeanを作成します。 FormDataBean nextFormBean = new FormDataBean("NextForm"); // 出力データをXMLから取得します。 XmlDataBean outData = new XmlDataBean(); outData.loadFrom("c:¥¥template¥¥sample.xml"); nextFormBean.setData(outData);