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

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 6月 12日 (火) 09:22:10 JST


お世話になります。田口です。

TeedaExtensionの動作はよくわかりました。
もう少し調べてみます。
ご回答ありがとうございました。

>大谷です。
>
>> ボタンを押下して、
>> 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 mailing list
>[E-MAIL ADDRESS DELETED]
>https://ml.seasar.org/mailman/listinfo/seasar-user
>



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