[Seasar-user:6816] Re: [Teeda]ErrorPageManager使用時のRender処理について

関 真理子 [E-MAIL ADDRESS DELETED]
2007年 3月 22日 (木) 16:04:43 JST


関です。

> 下記の対応で問題ないようなので、Teedaのtrunkに取り込みました。
> フィードバックありがとうございましたm(_ _)m
こちらこそ、ありがとうございますー。


On Thu, 22 Mar 2007 15:54:05 +0900
"Shinpei Ohtani" <[E-MAIL ADDRESS DELETED]> wrote:

> 関さん、
> 
> 大谷です。
> 
> 下記の対応で問題ないようなので、Teedaのtrunkに取り込みました。
> フィードバックありがとうございましたm(_ _)m
> 
> 
> 07/03/19 に Shinpei Ohtani<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > 大谷です。
> >
> > 関さん、色々とありがとうございます。
> > コミッタの方で下記対処方法でよいか検討してみます。
> >
> > 宜しくお願いします。
> >
> > 07/03/19 に 関 真理子<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > > たびたび恐れ入ります。関です。
> > >
> > > TViewRootRendererに手を加えることで、
> > > 問題の現象が回避できました。
> > >
> > > ただ、
> > > 論理的にあっているのか、他に影響ないのか
> > > (ローカルで動かしている分には大丈夫そうなのですが)
> > > といった点が確認できていません。
> > >
> > > こういった対応では問題がある、など
> > > 情報ありましたらお教えいただければと思います。
> > >
> > > 手を加えた内容は、以下になります。
> > > TViewRootRenderer
> > > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> > >     public void encodeBegin(FacesContext context, UIComponent component)
> > >             throws IOException {
> > >         super.encodeBegin(context, component);
> > >         TViewRoot viewRoot = (TViewRoot) component;
> > >         if (viewRoot.getRootViewId() == null) {
> > >             layout(context, viewRoot);
> > >         }
> > >         invokeAll(context);
> > >         invoke(context, viewRoot.getRootViewId()); // ここからprerenderが呼ばれる
> > >         if (!context.getResponseComplete()) { // ★このif分を追加。
> > >             RendererUtil.renderChildren(context, component); // その他ComponentのRendering処理
> > >         }
> > >     }
> > > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> > > prerender処理内で、
> > > ErrorPageManagerで登録されている例外が発生した場合は、
> > > catchされ、context.responseComplete()が設定されていた(HtmlComponentInvokerImpl)ので、
> > > context.responseComplete()でprerender以降の処理を行うかの判定を追加しています。
> > >
> > >
> > >
> > >
> > >
> > > On Mon, 19 Mar 2007 14:52:41 +0900
> > > 関 真理子 <[E-MAIL ADDRESS DELETED]> wrote:
> > >
> > > > たびたび恐れ入ります。関です。
> > > >
> > > > 先ほどの補足です。
> > > > 具体的な実装例は、以下になります。
> > > >
> > > > teedaErrorPage.dicon
> > > > -----------------
> > > >       <component class="org.seasar.teeda.extension.util.TeedaExtensionErrorPageManagerImpl">
> > > >               <initMethod name="addErrorPage">
> > > >                       <arg>@[E-MAIL ADDRESS DELETED]</arg>
> > > >                       <arg>"/view/hoge/hogeError.html"</arg>
> > > >               </initMethod>
> > > >               <initMethod name="addErrorPage">
> > > >                       <arg>@[E-MAIL ADDRESS DELETED]</arg>
> > > >                       <arg>"/view/error/error.html"</arg>
> > > >               </initMethod>
> > > >       </component>
> > > > -----------------
> > > >
> > > > HogePage
> > > > -----------------
> > > >     public String prerender() {
> > > >         List<Hoge> hogeList = selectHogeList();
> > > >         if(hogeList == null || hogeList.size() <= 0){
> > > >             throw new HogeException("hogeList is null.");
> > > >         }
> > > >         setHogeItems(hogeList);
> > > >     }
> > > >
> > > >     getHogeStyle(){
> > > >         getHogeItems().get(hogeIndex).getHogeStyleValue(); // ←ここが呼ばれて欲しくない
> > > >     }
> > > > -----------------
> > > >
> > > >
> > > >
> > > > On Mon, 19 Mar 2007 14:06:43 +0900
> > > > 関 真理子 <[E-MAIL ADDRESS DELETED]> wrote:
> > > >
> > > > > いつもお世話になっております。関です。
> > > > >
> > > > > Teeda 1.0.6を使用しております。
> > > > >
> > > > > prerender内から「ErrorPageManager」機能を使用して
> > > > > エラー画面への遷移させる際のRender処理について質問させてください。
> > > > >
> > > > > とある例外をteedaErrorPage.diconに定義をし、その例外をprerender内で発生させた場合に、
> > > > > そのPageのRender処理(Page内のgetterが呼ばれる)が行われた後に、
> > > > > teedaErrorPage.diconに定義した画面に遷移するようですが、
> > > > > これは仕様になりますでしょうか?
> > > > >
> > > > > prerender内で例外が発生した場合、Page内が不正の状態
> > > > > (例外発生以降の処理が中断されているため、Renderするために必要な値が設定
> > > > > できていない状態)
> > > > > になるため、
> > > > > Page内のgetterが呼ばれた際に意図しない例外が発生してしまいます。
> > > > >
> > > > >
> > > > > teedaErrorPage.diconに定義されているということは、必ず画面遷移をするため、
> > > > > 例外が発生した画面のRender処理はその場で終了しても良いのではないかと思うのですが、
> > > > > どうでしょうか?
> > > > >
> > > > >
> > > > > 以上です。
> > > > > --
> > > > > 関真理子 <[E-MAIL ADDRESS DELETED]>
> > > > >
> > > > >
> > > > > _______________________________________________
> > > > > Seasar-user mailing list
> > > > > [E-MAIL ADDRESS DELETED]
> > > > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > > >
> > > > --
> > > > 関真理子 <[E-MAIL ADDRESS DELETED]>
> > > >
> > > >
> > > > _______________________________________________
> > > > Seasar-user mailing list
> > > > [E-MAIL ADDRESS DELETED]
> > > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > >
> > > --
> > > 関真理子 <[E-MAIL ADDRESS DELETED]>
> > >
> > >
> > > _______________________________________________
> > > Seasar-user mailing list
> > > [E-MAIL ADDRESS DELETED]
> > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > >
> >
> >
> > --
> > =============================
> > Shinpei Ohtani
> > [E-MAIL ADDRESS DELETED]
> > =============================
> >
> 
> 
> -- 
> =============================
> Shinpei Ohtani
> [E-MAIL ADDRESS DELETED]
> =============================
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user

-- 
関真理子 <[E-MAIL ADDRESS DELETED]>





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