[Seasar-user:11427] Re: Pageクラスのプロパティ値にEntityクラスを使用した場合すべてのメソッドが呼ばれてしまう

mariko seki [E-MAIL ADDRESS DELETED]
2007年 11月 4日 (日) 01:29:46 JST


関と申します。
横から失礼致します。

> > Pageクラスでは、画面表示に必要なメソッド(HtmlのID値に紐付いているgetter,
> > setterメソッド)だけが呼ばれることを想定していましたが、どうやらすべてのpublic
> > メソッドが呼ばれてしまうようです。
> > 余分なDtoを作成せずにこの問題を回避する方法はあるでしょうか?
>
> Dto の代わりに Map を使うくらいしかないと思います.

私も昨年Teedaを使っていた際に同じ問題にへこみました。

ソースを見た限りでは、
TForEach#processBeanItem()の
foreachのItemから値を取得し、その値をPageにSetしている箇所で、
「PageクラスにPropertyがあるか否か」を判定してあげればいいのではないかと思っていたのですが、
いかがでしょうか?
(PageにSetしないなら、ItemからGetしなくてよいはずなので。)

こんなかんじで。
---------------
    for (int i = 0; i < itemBeanDesc.getPropertyDescSize(); i++) {
        final PropertyDesc pd = itemBeanDesc.getPropertyDesc(i);
        final String name = pd.getPropertyName();
        if (beanDesc.hasPropertyDesc(name)) {★PageクラスにPropertyがあるか否か
            final Object value = getValue(itemBeanDesc, item, name);
            setValue(beanDesc, page, name, value);
        }
    }
---------------

実際にこの修正を加えて開発したわけではないので、他へ影響あって無理ーということでしたらごめんなさい。
不要なGet呼び出しは無いほうが、パフォーマンス的にもいいことあるんじゃないか、という素人考えでした。

以上です。


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