“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);