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

関 真理子 [E-MAIL ADDRESS DELETED]
2007年 3月 19日 (月) 17:35:55 JST


たびたび恐れ入ります。関です。

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 メーリングリストの案内