前回、seedorep属性について説明しました。
次に、繰り返しによる置換の機能をお見せします。
この機能は、2つの属性をseedorep属性があるタグの内側に記述します。
seedorecord属性 と seedofield属性 です。
住所録や商品一覧は、レコードによって住所や商品を格納し、複数のレコードで一覧を構成します。
これをtableタグで一覧にするとき、テーブルのTDタグによって囲まれた値を置換する手順を提供します。
tableタグのseedorep属性によって、seedorecordTest関数を定義します。
1件すなわち1レコードの単位をtrタグにseedorecord属性を定義します。
以下の例では、HD、a、b、cの4つのレコードが定義されます。
tdタグには、レコードの項目を定義するために、seedofield属性を入れます。
seedorecord属性のbとcには、a1,a2,a3,a4 を定義します。
HDのようにseedofield属性を定義しなくてもいいです。
A1 | A2 | A3 | A4 |
---|---|---|---|
A1 | A2 | A3 | A4 |
B1 | B2 | B3 | B4 |
C1 | C2 | C3 | C4 |
ScalaのHelloWorldクラスに次のseedorecordTest関数を追加します。
def seedorecordTest: String = { println("####### seedorecordTest " + tag) if (parameterMap != null) { println("map=" + parameterMap.size) parameterMap.foreach(i => { println(i._1 + "=" + i._2.toList) }) } // println("tag=["+tag+"]") var rec = "" if (record != null) { // seedoreocrd属性のレコード解析結果を表示する println("=============================================") for ((k, v) <- record) { println("<" + k + ">=") v.foreach { kv => val (k1, v1) = kv println("[" + k1 + "]=[" + v1 + "]") rec += v1 } println("-----------------------------------------") } rec += "\n\n" // 区切り for ((k, v) <- record) { if (k == "b") { val b = record.get("b").get b.put("a1", "Z11111") b.put("a2", "Z22222") b.put("a3", "Z33333") b.foreach { kv => val (k1, v1) = kv rec += v1 } b.put("a1", "AAA11111") b.put("a2", "BBB22222") b.put("a3", "CCC33333") b.foreach { kv => val (k1, v1) = kv rec += v1 } } else if (k == "c") { } else { v.foreach { kv => val (k1, v1) = kv rec += v1 } } } } "HelloWorld seedorecordTest [" + record.size + "] \n" + rec + "\n date=" + new Date }
seedorecord属性がbのレコードの値を使って、tdタグの値を置換します。
seedorecord属性によって処理されるタグ達は、LinkedHashMapクラスによって保持されます。
record:LinkedHashMap[String,LinkedHashMap[String,String]]
tdタグの間の文字列は、seedofield属性の値でHashMapにキー管理されますから、put関数で上書きすることができます。
LinkedHashMapはHashMapに追加した順序を保持しますからForループで取り出される順序は元のタグと同じとなります。
cのレコードは表示しないようにします。
それ以外のタグは、置換せずにそのまま表示することになります。
上記のHTMLソースを実行するとseedorecordTest関数が実行され、以下のようにタグが置換されます。
HelloWorld seedorecordTest [10]
A1 | A2 | A3 | A4 |
---|---|---|---|
A1 | A2 | A3 | A4 |
B1 | B2 | B3 | B4 |
C1 | C2 | C3 | C4 |
A1 | A2 | A3 | A4 |
---|---|---|---|
A1 | A2 | A3 | A4 |
Z11111 | Z22222 | Z33333 | B4 |
AAA11111 | BBB22222 | CCC33333 | B4 |
いかがでしょう。使ってみたくなりましたか。