[Seasar-user:8227] Re: [Teeda]PostBackUtil.isPostBackの使用について

Shinpei Ohtani [E-MAIL ADDRESS DELETED]
2007年 6月 11日 (月) 18:29:45 JST


大谷です。

> ボタンを押下して、
> JSFページCのページクラスが動作して
> PhaseListenerで確認した時に、
> >> ViewIdにもJSFページB、previousViewIdにもJSFページBと
> >> なっており、うまく判定ができません。
> ということです。

ちょっとこれがよくわからないですね。
ページCに遷移すれば、少なくともpreviousViewIdが
ページCになるはずです。

TeedaExtensionでの動作は下記のようになります。

input.html, result.htmlとあったとして、
result.html -> input.htmlにボタンで戻る場合、

・result.htmlで、POSTメソッドによってRestoreViewPhaseが動く
 (このときにはまだresult.htmlへ対してへのPOSTなので、
 previousViewId=result.html, viewId=result.htmlとなります)

・REDIRECTをはさみ、input.htmlに対して
 GETメソッドでRestoreViewPhaseが動く
 (このときには、previousViewId=result.html, viewId=input.html)

という動きになります。
しかし田口さんの言っているRenderResponsePhaseの
PhaseListenerはTeedaExtensionでは、
input.htmlへのGETでしか動きません。

それと気になったのですが、

>if (phaseId == PhaseId.RENDER_RESPONSE) {
>
>   // 同一画面表示の場合は、INITIALIZE_METHODはinvokeしない
>   if (!(PostbackUtil.isPostback(requestMap))) {
>       // initializeを実行
>       invoke(context,viewId,INITIALIZE_METHOD);
>   }

PhaseListenerはgetPhaseId()でそのPhaseListenerが
動くPhaseを指定できるので、上記のようなロジックでなくても
指定していれば問題なく特定Phaseで動くと思います。


これで参考になったでしょうか?
宜しくお願いします。

07/06/11 に [E-MAIL ADDRESS DELETED]<[E-MAIL ADDRESS DELETED]>
さんは書きました:
> お世話になります。田口です。
>
> >戻る、とはどのように戻っているのでしょうか?
> すいません、表現がまずかったですね。
> >> JSFページCからJSFページBに戻る際に、
> ではなく、
> JSFページCからJSFページBに遷移する際に、
> です。
> ボタンを押下して、
> JSFページCのページクラスが動作して
> PhaseListenerで確認した時に、
> >> ViewIdにもJSFページB、previousViewIdにもJSFページBと
> >> なっており、うまく判定ができません。
> ということです。
>
>
> >大谷です。
> >
> >> >現在のPostbackの設定はPOSTであれば、
> >> >常にsetPostback(true)になっています。
> >>
> >> まず、Teeda Extensionを使用しない場合は
> >> PostbackUtilは使用しないという認識でよろしいですか?
> >
> >使っても良いですが、現状のTeedaの仕様だと
> >PostbackUtilではPOSTかどうかしか見ていません。
> >POSTで最初にリクエストが飛んできた場合、その画面は
> >それ以降自画面postback=trueになります。
> >
> >> 非JSFページAからJSFページBへの遷移時はうまくいきます。
> >> JSFページBからJSFページCへの遷移時もうまくいきますが、
> >> JSFページCからJSFページBに戻る際に、
> >> ViewIdにもJSFページB、previousViewIdにもJSFページBと
> >> なっており、うまく判定ができません。
> >
> >戻る、とはどのように戻っているのでしょうか?
> >ブラウザのバックボタンで戻っている場合、
> >previousViewIdは更新されません。
> >宜しくお願いします。
> >
> >07/06/11 に [E-MAIL ADDRESS DELETED]<[E-MAIL ADDRESS DELETED]>
> >さんは書きました:
> >> お世話になります。田口です。
> >>
> >> >現在のPostbackの設定はPOSTであれば、
> >> >常にsetPostback(true)になっています。
> >>
> >> まず、Teeda Extensionを使用しない場合は
> >> PostbackUtilは使用しないという認識でよろしいですか?
> >>
> >> >requestMapにはpreviousViewIdというキーで前のviewIdが
> >> >入っていますので、それとViewRoot.getViewId()とで
> >> >比較できるはずです。
> >> PostbackUtilの代わりに、
> >> 上記の比較で行ってみましたが、
> >> 非JSFページAからJSFページBへの遷移時はうまくいきます。
> >> JSFページBからJSFページCへの遷移時もうまくいきますが、
> >> JSFページCからJSFページBに戻る際に、
> >> ViewIdにもJSFページB、previousViewIdにもJSFページBと
> >> なっており、うまく判定ができません。
> >>
> >> 判定は前回同様、JSFライフサイクルのRENDER_RESPONSE時の
> >> beforePhase処理にて行っております。
> >>
> >> 他、チェックポイントなどあれば
> >> ご教示願います。
> >>
> >>
> >> >大谷です。
> >> >
> >> >現在のPostbackの設定はPOSTであれば、
> >> >常にsetPostback(true)になっています。
> >> >これはTeedaExtensionで必要なためそうしています。
> >> >
> >> >なので、PhaseListenerでのPostbackでは
> >> >それとは別に前のViewIdと現在のViewIdのチェックを
> >> >する方が良いと思います。
> >> >requestMapにはpreviousViewIdというキーで前のviewIdが
> >> >入っていますので、それとViewRoot.getViewId()とで
> >> >比較できるはずです。
> >> >
> >> >> 他に何かチェックするポイントはありますでしょうか?
> >> >> よろしくお願いします。
> >> >
> >> >07/06/11 に [E-MAIL ADDRESS DELETED]<[E-MAIL ADDRESS DELETED]>
> >> >さんは書きました:
> >> >> お世話になります。田口です。
> >> >>
> >> >> 確認してみましたが、
> >> >> RestoreViewPhaseが動き、
> >> >> PostbackUtil.setPostback()が動作しています。
> >> >> しかし、setPostbackでは"true"が設定されてしまいます。
> >> >> (引数のpostbackはtrueになっている)
> >> >> Teedaは1.0.7です。
> >> >>
> >> >> 他に何かチェックするポイントはありますでしょうか?
> >> >> よろしくお願いします。
> >> >>
> >> >> >大谷です。
> >> >> >
> >> >> >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 mailing list
> >> >> >[E-MAIL ADDRESS DELETED]
> >> >> >https://ml.seasar.org/mailman/listinfo/seasar-user
> >> >> >
> >> >> _______________________________________________
> >> >> Seasar-user mailing list
> >> >> [E-MAIL ADDRESS DELETED]
> >> >> https://ml.seasar.org/mailman/listinfo/seasar-user
> >> >>
> >> >
> >> >
> >> >--
> >> >=============================
> >> >Shinpei Ohtani
> >> >[E-MAIL ADDRESS DELETED]
> >> >=============================
> >> >_______________________________________________
> >> >Seasar-user mailing list
> >> >[E-MAIL ADDRESS DELETED]
> >> >https://ml.seasar.org/mailman/listinfo/seasar-user
> >> >
> >> _______________________________________________
> >> Seasar-user mailing list
> >> [E-MAIL ADDRESS DELETED]
> >> https://ml.seasar.org/mailman/listinfo/seasar-user
> >>
> >
> >
> >--
> >=============================
> >Shinpei Ohtani
> >[E-MAIL ADDRESS DELETED]
> >=============================
> >_______________________________________________
> >Seasar-user mailing list
> >[E-MAIL ADDRESS DELETED]
> >https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


-- 
=============================
Shinpei Ohtani
[E-MAIL ADDRESS DELETED]
=============================



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