5.5.1 decodeHtmlPartParamメソッド
HTMLパーツから入力されたエンコード文字列を引数として受け取り,Map形式に変換します。
(1) 形式
public static Map<String, String> decodeHtmlPartParam(String param)
throws UCNPPluginException;
(2) 引数
(a) param
HTMLパーツから入力されたエンコード文字列が格納されます。
(3) 戻り値
Map<String, String>
HTMLパーツ内の各入力項目に対応した値がMapで返されます。入力項目のname属性をキー,value属性を値とするMapです。引数paramが空文字の場合,空のMapが返されます。ユーザは戻り値のMapから,HTMLパーツで設定した要素のname属性をキーとして,値を取得してください。
(4) 例外
UCNPPluginException - エンコード文字列の変換に失敗した場合
このメソッドでエラーが発生した場合,Map形式への変換処理は中断され,UCNPPluginException例外がスローされます。エラーの一覧を次に示します。
|
エラー |
メッセージID |
|---|---|
|
HTMLパーツの入力パラメタ以外のデータに対して,このメソッドを実行した場合 |
KDCZ10205-E |
(5) 使用例
IIoPluginControllerインタフェースのinputFromNodeメソッド内で,decodeHtmlPartParamメソッドを使用する例を説明します。
条件
この例は次の条件に基づいています。
-
入出力プラグインのサンプルを利用する。
入出力プラグインのサンプルについては,「付録A.1 入出力プラグイン(サンプル)の使用方法」を参照してください。
-
HTMLパーツ用に次の外部CSSファイルを作成している。
table.sample { border:1px solid #777777; border-collapse:collapse; border-spacing:0; background-color:#ffffff; } th.sample { border-right:1px solid #777777; border-bottom:1px solid #777777; background-color:#e3e5e7; padding:0.3em 1em; text-align:center; } td.sample { border-right:1px solid #777777; border-bottom:1px solid #777777; padding:0.3em 1em; } -
入力パラメタ「inputItemName1」に,次のソースコードを入力したHTMLパーツを関連づけている。
<TABLE class="sample"> <TBODY> <TR> <TH class="sample"></TH> <TH class="sample">注文番号</TH> </TR> <TR> <TD class="sample"><input type="radio" name="order" value="0001-20100801-00001" /></TD> <TD class="sample"> 0001-20100801-00001</TD> </TR> <TR> <TD class="sample"><input type="radio" name="order" value="0001-20100801-00002" /></TD> <TD class="sample"> 0001-20100801-00002</TD> </TR> </TBODY> </TABLE>
HTMLパーツの画面上の表示は次のとおりです。
-
出力パラメタ「outputItemName1」と固定テキストパーツを関連づけている。
-
利用者が選択したラジオボタンに応じて,次の工程のガイド領域に表示される注文番号が変わるようにする。
入出力プラグインの実装例
条件に示したHTMLパーツから入力パラメタを受け取って処理する実装例を次に示します。decodeHtmlPartParamメソッドを使用しているのは,太字で示した部分です。
package jp.co.hitachi.soft.ucnp.plugin.sample.ioaction.controller;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import jp.co.hitachi.soft.ucnp.plugin.inputoutput.controller.IIoPluginController;
import jp.co.hitachi.soft.ucnp.plugin.inputoutput.common.UCNPPluginException;
import jp.co.hitachi.soft.ucnp.plugin.inputoutput.util.ParamConvertUtil;
public class IoPluginController implements IIoPluginController {
/* クライアントから受信した入力パラメタの値を保持するメンバ変数です。 */
private String param1 = null;
private String param2 = null;
private String param3 = null;
public Map<String, Object> inputFromNode(HttpSession session,
Map<String, Object> param) {
/* クライアントに処理結果を送るためのMapを生成します。 */
Map<String, Object> map = new HashMap<String, Object>();
/* ボタンの種別で処理を分けます。*/
String buttonType = (String) param.get("ucnp.button.type");
if ("show_next_page".equals(buttonType)) {
/* [次へ]ボタンの場合は,入力の値を取得してメンバ変数で保持します。 */
/* クライアントから受信したデータをMapに展開します。 */
Map<?, ?> inParamMap = (Map<?, ?>) param.get("ucnp.current.params.map");
/* 変換する値をMapより取り出します。 */
String inParam1 = (String) inParamMap.get("inputItemName1");
Map<String, String> decodedMap = null;
/* APIを利用するため,try-catchで囲みます。*/
try {
decodedMap = ParamConvertUtil.decodeHtmlPartParam(inParam1);
} catch (UCNPPluginException e) {
/* 例外処理を行います。 */
String errMsg = e.getMessage();
/* プラグインのログ出力などの処理をします。 */
/* エラーメッセージをマップに追加して返します。*/
map.put("ucnp.error.message", errMsg);
return map;
}
/* name属性が「order」のvalue属性の値を取得します。*/
String value = decodedMap.get("order");
/* メンバ変数に入力パラメタの値を設定します。 */
param1 = value;
param2 = (String) inParamMap.get("inputItemName2");
param3 = (String) inParamMap.get("inputItemName3");
} else if ("show_previous_page".equals(buttonType)) {
/* 戻るボタンの場合は,何もしません。 */
}
return map;
}
public Map<String, Object> outputToNode(HttpSession session,
Map<String, Object> param) {
/* クライアントへ送るMapを生成します。 */
Map<String, Object> map = new HashMap<String, Object>();
/* ボタンの種別で処理を分けます。*/
String buttonType = (String) param.get("ucnp.button.type");
if ("show_next_page".equals(buttonType)) {
/* 次へボタンの場合は,入力の値を出力項目へマッピングします。 */
Map<String, String> outParamMap = new HashMap<String, String>();
/* Mapに送信するデータを設定します。 */
/* outputItemName1に固定テキストパーツを設定しているので,
この固定テキストパーツの値としてHTMLパーツから取得した値を設定します。*/
outParamMap.put("outputItemName1", param1);
outParamMap.put("outputItemName2", param2);
outParamMap.put("outputItemName3", param3);
map.put("ucnp.next.params.map", outParamMap);
} else if ("show_previous_page".equals(buttonType)) {
/* 戻るボタンの場合は,何もしません。 */
}
return map;
}
}