[Seasar-user:11424] Re: Render中にPageクラスのプロパティの値が変わってしまう場合がある

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 11月 4日 (日) 00:00:47 JST


小林 (koichik) です.

Date:    Sat, 3 Nov 2007 05:44:46 +0900
From:    "Shinichi Yanagisawa" <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:11419] Re: Render中にPageクラスのプロパティの値が変わってしまう場合がある

> コピースタックを添付します。

見落としてましたが,forEach が使われているのですね.
forEach を使った場合,Page クラスには xxxItems と
同時に,その要素である xxx がプロパティとして必要に
なります.
Teeda は状態を管理するために,これらのプロパティに
対して次のような操作を行います.

for (Xxx xxx : xxxItems) {
  page.setXxx(xxx);
  page.setYyy(xxx.getYyy());
  ... // 状態の反映や保存等
  xxx.setYyy(page.getYyy());
}

xxxItems の各要素を Page クラスの xxx に設定すると
同時に,xxx のプロパティ yyy も Page クラスの
プロパティ yyy に設定します.
そうやって xxxItems の持つ状態を Page クラスの直接の
プロパティに反映させた上で,状態の管理を行います.

上記の操作を今回の ShowSaleDetailPage に置き換えると,

for (SaleDetail saleDetail : saleDetailItems) {
  page.setSaleDetail(xxx;
  page.setSale(saleDetail.getSale());
  ... // 状態の反映や保存等
  saleDetail.setSale(page.getSale());
}

のようになります.

xxxItems に対する xxx や,それが JavaBeans の場合は
そのプロパティ yyy 等も Page クラスに必要になりますが,
それらは Teeda が状態を管理するために使用します.
その際に値を set/get するのは仕様ということで
ご理解ください.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




Seasar-user メーリングリストの案内