手順 - サブミットされたクライアント生成非表示フォームデータ
クライアント生成フィールドにデフォルト値を追加する (任意)
|
アプリケーションで各テーブル行に非表示の入力値が必要でない場合、このステップは省略できます。
|
アプリケーションでテーブルに表示される各オブジェクトに非表示の入力値が必要な場合、ウィザードのテーブルビルダーで、'データストア専用' かつ '編集可能' な列を定義する 1 つ以上の列定義を追加します。適切なデータユーティリティを使用してデフォルト値を生成します。イベントリスナーで識別可能な一意の名前を列に指定します ("hiddenColumn1" など)。
TableConfig table = factory.newTableConfig();
table.setId ('MYTABLEID');
..
. <... other table configuration here ...>
.
ColumnConfig hiddenCol1 = factory.newColumnConfig ("hiddenColumn1", false);
hiddenCol1.setDataUtilityId ("SOME_DU_ID");
hiddenCol1.setNeed ("SOME_DU_ID");
hiddenCol1.setComponentMode (ComponentMode.EDIT);
hiddenCol1.setDataStoreOnly (true);
table.addComponent (hiddenCol1);
ColumnConfig hiddenCol2 = factory.newColumnConfig ("hiddenColumn2", false);
hiddenCol2.setDataUtilityId ("SOME_DU_ID");
hiddenCol2.setNeed ("SOME_DU_ID");
hiddenCol2.setComponentMode (ComponentMode.EDIT);
hiddenCol2.setDataStoreOnly (true);
table.addComponent (hiddenCol2);
上記のコードの太字の行に示されているように、非表示データ列は "編集可能" かつ "データストア専用" として定義されている必要があります。
SOME_DU_ID は列のデフォルト値を提供する適切なデータユーティリティの ID です。このユーティリティはウィザードのテーブル内のオブジェクトに null 以外の値を返す必要があります。そうでない場合、データストア内のオブジェクトの行に対応するフィールドは表示されません。
ウィザードの JSP ファイルに <script/> ブロックを追加する
ウィザードの JSP に、アプリケーション固有の Javascript ファイルを読み込む <script/> ブロックを追加します。この例を次に示します。
<script type="text/javascript"
src="netmarkets/javascript/MYAPPLICATION/MYJSFILE.js">
</script>
アプリケーションのクライアント側ロジックを追加する
Javascript ファイル …/netmarkets/javascript/MYAPPLICATION/MYJSFILE.js を新規作成します。このファイルには、ウィザードのテーブルで通知される 'サブミット' イベント用のアプリケーションのリスナーが含まれます。コードは次のガイドラインに従う必要があります。
// Establish namespace
PTC.MYAPPLICATION={};
// Define wizard table 'submit' listener
PTC.MYAPPLICATION.MYLISTENER = function (table)
{
// see PTC.fakeLiterature.submitListener() code in
// /netmarkets/javascript/carambola/dataStoreOnlyExample.js};
// Add submit listener for wizard table once the table becomes 'available'
PTC.onAvailable
( 'MYTABLEID', function (table)
{
table.on ('submit', PTC.MYAPPLICATION.MYLISTENER);
});
}
この例では、サブミットリスナーによって、JCAappendFormHiddenInput を使用して、サブミットされたフォームに非表示入力データが追加されています。この例では、クライアント側ロジックが、ID 'MYTABLEID' を持つテーブルの各行に追加された 2 つの非表示プロパティを検索しています。これらのプロパティはデータストア内の各行に存在しますが、UI に表示されるテーブルの DOM には含まれていません。これらのプロパティにはそれぞれ "hiddenColumn1" および "hiddenColumn2" という名前が付いています。このいずれかの非表示プロパティがオブジェクトで見つかった場合、オブジェクト [row.get (“objectHandle”)] と非表示値自体 ("hiddenColumn1" など) を識別する非表示入力フィールドが生成され、これはあまり便利でない定数値を指定します。
この例は、いずれの非表示列にも関連付けられていないが特定のオブジェクトを識別する非表示の入力値を追加する方法も示しています (上記の JCAappendFormHiddenInput の 2 回目の呼び出しを参照)。
もちろん、この同じタイプのリスナーを使用して、フォームをサブミットする前に必要なデータを追加、変更、除去できます。これはいわゆる "データストア専用" フィールドの操作に限定されていません。
ウィザードのフォームプロセッサで非表示の入力値を抽出する
最後のステップでは、ウィザードのフォームプロセッサの適切なメソッド内で、アプリケーションの 'サブミット' リスナーによって追加された、サブミットされた非表示の入力値を抽出します。
for (ObjectBean objBean : objectBeans)
{
final String paramKeyFoo = "noColumn";
final String paramKeyCol1 = "hiddenColumn1";
final String paramKeyCol2 = "hiddenColumn2";
String paramFoo = objBean.getTextParameter (paramKeyFoo);
String paramCol1 = objBean.getTextParameter (paramKeyCol1);
String paramCol2 = objBean.getTextParameter (paramKeyCol2);
log.error ("\nkey = " + paramKeyFoo + "\nvalue = " + paramFoo);
log.error ("\nkey = " + paramKeyCol1 + "\nvalue = " + paramCol1);
log.error ("\nkey = " + paramKeyCol2 + "\nvalue = " + paramCol2);
}
この結果、次のようなコードを含む出力が行われます。このコードには、先に示した Javascript 'サブミット' リスナーによってオブジェクトに追加された、クライアント側で生成された 3 つの値が示されています。
KEY = noColumn
VALUE = FOO_BAR_BIZ_BAZ
KEY = hiddenColumn1
VALUE = HIDDEN_COLUMN_1_GENERATED_VALUE
KEY = hiddenColumn2
VALUE = HIDDEN_COLUMN_2_GENERATED_VALUE