[Seasar-user:8218] Re: [Teeda]PostBackUtil.isPostBackの使用について
Shinpei Ohtani
[E-MAIL ADDRESS DELETED]
2007年 6月 11日 (月) 10:51:16 JST
大谷です。
Teeda1.0.7に限って話を進めさせてください。
(古いバージョンであればまた別途調査してみないとわかりません)
内部的にTeedaCoreの上にどのような拡張をしているかに
よってしまうのですが、
PostbackUtil.isPostback()は単純にrequestMapに
あるpostbackというキーに紐づくbooleanだけを見ています。
これはどこで設定されているかというと、
TeedaのRestoreViewPhase.setUpRestoreViewPhase()で行われています。
つまりRestoreViewPhaseとRenderResponsePhaseが
同一requestで行われているならば、PostbackUtilは正しく動くはずです。
JSF画面からJSF画面に遷移する際にRestoreViewPhaseが
正しく動いていて、PostbackUtil.setPostback()が正しく
動いているかをデバッガなどで見てみてください。
07/06/11 に [E-MAIL ADDRESS DELETED]<[E-MAIL ADDRESS DELETED]>
さんは書きました:
> お世話になります。田口です。
>
> Teedaでの初期処理を、JSPを使用する関係上、
> Teeda Extensionを使用せず、
> PhaseListenerを使って、処理しようとしております。
>
> その際に、initialize,prerennderの判定において
> PostbackUtil.isPostBackメソッドを使用を検討していますが、
> 画面遷移時にinitializeメソッドが実行されません。
>
> 具体的には、PhaseListenerで、
> JSFライフサイクルのRENDER_RESPONSE時の
> beforePhase処理において、
> 下記のような判定ロジックを記載していますが、
> PostbackUtil.isPostback(requestMap)がfalseにならないため、
> initializeメソッドが動いていない状態です。
>
> ExternalContext externalContext = context.getExternalContext();
> Map<String, String> requestMap = externalContext.getRequestMap();
>
> // フェーズIDがRENDER_RESPONSEの場合
> if (phaseId == PhaseId.RENDER_RESPONSE) {
>
> // 同一画面表示の場合は、INITIALIZE_METHODはinvokeしない
> if (!(PostbackUtil.isPostback(requestMap))) {
> // initializeを実行
> invoke(context,viewId,INITIALIZE_METHOD);
> }
>
> 非JSF画面からの画面遷移時には、うまく動作していますが、
> JSF画面からJSF画面の遷移時には、initializeが動いていない状態です。
>
> そもそもの使用方法が間違っているのでしょうか?
> 処理方法について、ご教示ください。
> よろしくお願いいたします。
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
--
=============================
Shinpei Ohtani
[E-MAIL ADDRESS DELETED]
=============================
Seasar-user メーリングリストの案内