サポート > Wagby Developer Network(R8) > 高度な使い方 > 画面遷移 - モデル参照項目のルール

画面遷移時のパラメータ渡しで、モデル参照項目に関するルールをまとめます。

"リポジトリ > 画面機能 > 画面遷移 (6) 画面遷移パラメータまとめ"をお読みください。

Java および(サーバサイド)JavaSciprt では、イベント名は p.action で取得できます。内部コマンド情報は p.cmd で取得できます。

遷移元を model1、遷移先を model2 とします。model2 は複合キーで、それぞれ pkey1 と pkey2 とします。

この場合は model1 が保持する二つの項目(例 item1, item2)をそれぞれ pkey1, pkey2 に渡すようにします。渡す側と、受け取る側の項目の型を合致させてください。

遷移元を model1、遷移先を model2 とします。model2 内の項目 item3 はモデル参照項目で、参照先モデルを model3 とします。model3 は複合キーで、それぞれ pkey1, pkey2 とします。

図1 サンプルの構成

model1に用意したボタンで記載するパラメータ

参照先モデルの主キーが複合キーの場合、追加パラメータを次のように記述します。

項目名=${主キー1}$SEP$${主キー2}

主キー項目名を ${...} で記述しますが、さらにキーの連結文字列として、間に$SEP$を加えています。

item3=${item1}$SEP$${item2}
図2 model2へ渡すパラメータ

model2に用意するスクリプト

受け側となる model2 では、初期値の式ではなく、スクリプトによって値を解析してセットします。タイミングは「登録(初期データ作成)」です。

var item3 = p.request.getParameter("item3");
if (item3 != null) {
    var ss = item3.split("$SEP$");
    /*
    for (var i in ss) {
        stdout.println(i+"="+ss[i]);
    }
    */
    model2.item3Pkey1 = ss[0];
    model2.item3Pkey2 = ss[1];
}
図3 model2に用意するスクリプト

p.request は、Java アプリケーションサーバが管理する request オブジェクトです。getParameter メソッドを使うと、図2で指定したパラメータを受け取ることができます。

$SEP$ を区切り文字として split 関数を呼び出すと、配列が用意されます。個々の値を model2 の要素にセットします。

ここで、model2 では "item3" という項目を用意していますが、内部では次のように管理されています。

項目名_参照先モデルの主キー項目名(1番目)
項目名_参照先モデルの主キー項目名(2番目)

すなわち model2 では "item3_pkey1" と "item3_pkey2" という二つの項目が内部で保持されます。サーバサイドJavaScriptではキャメルルールにより、それぞれ "item3Pkey1", "item3Pkey2" と表記されます。(Pkeyの'P'が大文字になっています。) *1

1. pkey1,pkey2という表記は固定ではありません。例えば参照先モデルの主キー項目名が id1, id2 だった場合は、model2.item3Id1 = ss[0]; model2.item3Id2 = ss[1]; となります。

遷移元を model1、遷移先を model2 とします。model1 内の項目 item1 はモデル参照項目で、参照先モデルを model3 とします。model3 は複合キーで、それぞれ pkey1, pkey2 とします。

参照先モデルの主キーが複合キーの場合、追加パラメータを次のように記述します。

項目名=${項目名#id}$SEP$${項目名#id2}

項目名を ${...} で記述しますが、さらに項目名の後ろに #id, #id2,... という接尾語を加えています。接尾語の数字に対応して、model3 の主キー pkey1, pkey2 がそれぞれ渡されます。

遷移先モデル model2 の item 項目に渡す場合、次のようになります。

item=${item1#id}$SEP$${item1#id2}

受け側である model2 では、スクリプトを使って区切り文字 $SEP$ を分割してください。(「遷移先モデルのモデル参照項目が複合キーの場合」で説明済みのため、省略します。)

チェックボックス型項目の場合、コンマ区切りで値(参照先モデルのID部)が渡されます。遷移先モデルではスクリプトを使って、値を分割してから格納するようにしてください。遷移先モデル model2 の item 項目(これもチェックボックス型を想定)に値を格納するスクリプトの例を示します。

var item = p.request.getParameter("checkbox");
if (item !== null) {
  var array = item.split(",");
  var i;
  for (i=0; i<array.length; i++) {
    /*stdout.println("i="+i+","+array[i]);*/
    if (array[i] !== '') {
      model2.addItem(parseInt(array[i]));/*model2のitemはチェックボックス型*/
    }
  }
}

区切り文字を変更する

コンマ以外の文字を区切り文字としたい場合、パラメータを次のように記述します。

item=${checkbox;|}

セミコロンのあとに区切り文字を指定します。受け側の JavaScript もそれにあわせて改造してください。

制約:この区切り文字指定機能に、次の文字は利用できません。

「;」「(」「)」「[」「]」「&」「=」「>」「<」「$」

Wagby Developer Day 2018