[Seasar-user:15779] Re: [S2JSF]forEach利用時のhistory back時の挙動について

Shin Tanimoto [E-MAIL ADDRESS DELETED]
2008年 9月 18日 (木) 23:33:50 JST


せろ (cero-t) です。
たぶん、これだと思います。

https://www.seasar.org/issues/browse/JSF-66

[JSF-66] - f:param利用時に、リクエストパラメータよりも
sessionの値(VB式で解決できる値)が優先して適用される。


SVNのコミットログはこちらから。
http://svn.seasar.org/browse?view=rev&root=s2jsf&revision=864


確認してみてください。

よろしくお願いします。



p.s.

私が大きめの実案件でS2JSFを使って、
ゴロゴロと出てきたバグを直したのが1.0.26や1.0.27なので
これ以降のバージョンを使うのがおすすめですよー。


> 米林さん
>
>伊東です。お世話になります。
>
>> お時間が取れるようでしたら、コミットログだけ見て頂いて
>> よろしいでしょうか?
>
>了解しました。コミットログを追ってみます。
>こちらでわかりましたら、再度ご連絡差し上げます。
>
>以上、宜しくお願い致します。
>
>-----Original Message-----
>From: [E-MAIL ADDRESS DELETED] [mailto:[E-MAIL ADDRESS DELETED]
>org] On Behalf Of [E-MAIL ADDRESS DELETED]
>Sent: Thursday, September 18, 2008 12:01 PM
>To: [E-MAIL ADDRESS DELETED]
>Subject: [Seasar-user:15769] Re:[S2JSF]forEach利用時のhistory back時の挙動に
>ついて
>
>米林です。
>
>> そこで、対応策として下記の2つを考えております。
>>  (1). s2-jsf-1.0.14.jar本体に修正を施す。
>>  (2). 現象が発生している画面ごとに修正を施す。
>>
>> 現在(2)の対応策で検討をしていますが
>> (1)の対応内容がテストを十分に行える修正内容であれば、(1)を行いたいと思って
>> います。
>> そこで、s2-jsf-1.0.14.jarからs2-jsf-1.0.28.jar(s2jsfの最新版)への変更のうち、
>>  
>> 
>> f:paramの優先順位の変更に関する修正の範囲が、お分かりであれば教えていただけ
>> ますでしょうか。
>> ※1.0.14〜1.0.28の間には多くの修正が施されていると思いますので、正確なもの
>> でなくても結構です。
>
>SVNのコミットログを見ると分かりますが、ちょっと時間が
>取れないのですぐ回答出来ません。
>
>お時間が取れるようでしたら、コミットログだけ見て頂いて
>よろしいでしょうか?
>
>----- Original Message -----
>From: "伊東 伸浩" <[E-MAIL ADDRESS DELETED]>
>
>
>> 米林さん
>>
>> 伊東です。お世話になっております。
>>
>> 以前、ご相談させていただいた、
>> s2jsfにおけるf:paramの優先順位に関して、
>> 再度ご相談をさせていただきたいと思います。
>>
>>
>> 以前ご相談させていただいた際に、
>> この現象が発生していたプロジェクトとは別のプロジェクトにおいて、
>> 同様のf:paramの優先順位に起因する問題が発見されました。
>>
>> 対象のプロジェクトでは下記のバージョンを使用しています。
>> s2-extension-2.3.8.jar
>> s2-framework-2.3.8.jar
>> s2-jsf-1.0.14.jar (このバージョンをベースとしてカスタマイズ済み)
>>
>>
>> 問題となる画面は、約40箇所ほど見つかっています。
>>
>> そこで、対応策として下記の2つを考えております。
>>  (1). s2-jsf-1.0.14.jar本体に修正を施す。
>>  (2). 現象が発生している画面ごとに修正を施す。
>>
>> 現在(2)の対応策で検討をしていますが
>> (1)の対応内容がテストを十分に行える修正内容であれば、(1)を行いたいと思って
>> います。
>> そこで、s2-jsf-1.0.14.jarからs2-jsf-1.0.28.jar(s2jsfの最新版)への変更のうち、
>>  
>> 
>> f:paramの優先順位の変更に関する修正の範囲が、お分かりであれば教えていただけ
>> ますでしょうか。
>> ※1.0.14〜1.0.28の間には多くの修正が施されていると思いますので、正確なもの
>> でなくても結構です。
>>
>>
>> お手数をおかけ致しますが、
>> 何卒、宜しくお願い致します。
>>
>>
>>
>> -----Original Message-----
>> From: [E-MAIL ADDRESS DELETED] 
>> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of [E-MAIL ADDRESS DELETED]
>> Sent: Tuesday, September 16, 2008 11:06 AM
>> To: [E-MAIL ADDRESS DELETED]
>> Subject: [Seasar-user:15756] Re:[S2JSF]forEach利用時のhistory back時の挙動
>> について
>>
>> 伊東さん
>> 米林です。
>>
>>> 米林さん、ご返信が遅くなりまして
>>> 大変申し訳ございません。
>>
>> いえいえ、気になさらずに。
>> 気になっていましたので回答があり安心しました。
>>
>>
>>> 最新版のs2jsfに差し替えたところ、
>>> f:paramが優先的に渡されており、
>>> 期待通りの動作をしていることを確認いたしました。
>>
>> それは良かったです。
>>
>>
>>> 対象のシステムは、現在も稼働中のシステムであり、
>>> 直近でのJARの差し替えを行うことは難しいですが、
>>> 今後のメンテナンスにて考慮していきたいと思います。
>>
>> 了解しました。
>> 検証結果の報告ありがとうございました。
>>
>>
>> ----- Original Message -----
>> From: "伊東 伸浩" <[E-MAIL ADDRESS DELETED]>
>>
>>
>>> 伊東です。
>>>
>>> 米林さん、ご返信が遅くなりまして
>>> 大変申し訳ございません。
>>>
>>>
>>>> f:paramの優先順位関連の議論をした記憶があり
>>>> 過去の修正で対応している可能性があります。
>>>> 最新版でも正常動作しない場合は、また連絡ください。
>>> 最新版のs2jsfに差し替えたところ、
>>> f:paramが優先的に渡されており、
>>> 期待通りの動作をしていることを確認いたしました。
>>>
>>>
>>> jarファイルの差し替え前と差し替え後の構成は下記の通りとなります。
>>> ※s2jsfのみの差し替えを行いました。
>>> 【差し替え前】
>>> s2-framework-2.3.11.jar
>>> s2-extension-2.3.11.jar
>>> s2-jsf-1.0.16.jar
>>>
>>> 【差し替え後】
>>> s2-framework-2.3.11.jar
>>> s2-extension-2.3.11.jar
>>> s2-jsf-1.0.28.jar
>>>
>>>
>>> 対象のシステムは、現在も稼働中のシステムであり、
>>> 直近でのJARの差し替えを行うことは難しいですが、
>>> 今後のメンテナンスにて考慮していきたいと思います。
>>>
>>> 以上、検証結果のご報告となります。
>>> この度は、誠のありがとうございました。
>>> 今後とも、宜しくお願い致します。
>>>
>>>
>>>
>>> -----Original Message-----
>>> From: [E-MAIL ADDRESS DELETED]
>>> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of [E-MAIL ADDRESS DELETED]
>>> Sent: Tuesday, September 09, 2008 5:03 PM
>>> To: [E-MAIL ADDRESS DELETED]
>>> Subject: [Seasar-user:15709] Re:[S2JSF]forEach利用時のhistory back時の挙動
>>> について
>>>
>>> 米林です。
>>>
>>> コミッタ間で話し合いました.
>>> お手数をおかけしますが最新版で確認して頂けますでしょうか?
>>>
>>> f:paramの優先順位関連の議論をした記憶があり
>>> 過去の修正で対応している可能性があります。
>>> 最新版でも正常動作しない場合は、また連絡ください。
>>>
>>> あらためて対応を考えます。
>>>
>>>
>>> よろしくお願いします。
>>>
>>>
>>> ----- Original Message -----
>>> From: "伊東 伸浩" <[E-MAIL ADDRESS DELETED]>
>>>
>>>
>>>> 伊東です。
>>>>
>>>> 米林さん、ご返信ありがとうございます。
>>>>
>>>> 何卒、宜しくお願い致します。
>>>>
>>>> -----Original Message-----
>>>> From: [E-MAIL ADDRESS DELETED]
>>>> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of [E-MAIL ADDRESS DELETED]
>>>> Sent: Friday, September 05, 2008 11:00 AM
>>>> To: [E-MAIL ADDRESS DELETED]
>>>> Subject: [Seasar-user:15659] Re:[S2JSF]forEach利用時のhistory back時の挙
>>>> 動について
>>>>
>>>> 米林です。
>>>>
>>>> すぐ回答出来なくて申し訳ありませんが
>>>> コミッタ間で確認させて下さい。
>>>>
>>>> よろしくお願いします。
>>>>
>>>> ----- Original Message -----
>>>> From: "伊東 伸浩" <[E-MAIL ADDRESS DELETED]>
>>>>
>>>>
>>>>> お世話になります。
>>>>> 伊東と申します。
>>>>>
>>>>> s2-framework-2.3.11
>>>>> s2-extension-2.3.11
>>>>> s2jsf-1.0.16
>>>>> を使用しております。
>>>>>
>>>>> 下記のような、実装をしている一覧画面にて、history backを使用した場合の
>>>>> 挙動についてご質問いたします。
>>>>>
>>>>> 対象の画面の構成は下記の通りとなります。
>>>>> ・ページング処理を行っている。
>>>>> ・"s:forEach"を使用して一覧を表示している。
>>>>> ・各行に詳細画面へのリンクが設けられており、"f:param"で対照データのIDを
>>>>> 送信している。
>>>>> ・詳細画面へのリンクが押されると、m:action="#{orderListAction.
>>>>> doOrderDetailLinkClick}"
>>>>>  というように自アクションのメソッドが呼び出される。
>>>>> ・doOrderDetailLinkClickメソッドにてIDのパラメータを受け取り、詳細画面へ
>>>>> forwardする。
>>>>>
>>>>>
>>>>> ここで、下記のような操作を行うと選択したデータと実際に表示される詳細画面
>>>>> のデータが異なるという
>>>>> 現象が発生します。
>>>>> 1.一覧の1ページ目を表示する。
>>>>> 2.ページングにて2ページ目に遷移する。
>>>>> 3.history backを使用して1ページ目に戻る。
>>>>> 4.1ページ目の1番目の詳細画面へのリンクを押すと、2ページ目の一番目の成
>>>>> 功で詳細画面が表示される。
>>>>>
>>>>> リンクにてIDをrequest parameterとして送信しているにもかかわらず、
>>>>> そのIDよりも、前画面で表示されていたIDが処理されていることになります。
>>>>>
>>>>>
>>>>> そこで、requestの受け渡しを行っている部分にログを埋め込んで調べてみまし
>>>>> た。 
>>>>> 
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ■ログ埋め込み対象のメソッド
>>>>>  ・UIParameterUtil.saveParamsToRequest()
>>>>>  ・BindingUtil.getValue()
>>>>>  
>>>>> ************************************************************************
>>>>> ************
>>>>> 【UIParameterUtil.saveParamsToRequest()】
>>>>>
>>>>> public static void saveParamsToRequest(UICommand command,
>>>>> HttpServletRequest request) {
>>>>> List children = command.getChildren();
>>>>> for (int i = 0; i < children.size(); ++i) {
>>>>> UIComponent child = (UIComponent) children.get(i);
>>>>> if (child instanceof UIParameter) {
>>>>> UIParameter param = (UIParameter) child;
>>>>>          if ("btkOrderId".equals(param.getName())) {    // 特定のパラ
>>>>> メータの場合、ログを出力
>>>>>              System.out.println("request.setAttribute(" +
>>>>> param.getName()+", " + param.getValue() + ");");
>>>>>          }
>>>>> request.setAttribute(param.getName(), param.getValue());
>>>>> }
>>>>> }
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>> 【BindingUtil.getValue】
>>>>>    public static Object getValue(HttpServletRequest request, String
>>>>> name)
>>>>> {
>>>>>        for (Enumeration names = request.getAttributeNames(); names
>>>>>                .hasMoreElements();) {
>>>>>            String reqName = (String) names.nextElement();
>>>>>            if (reqName.equals(name)) {
>>>>>                if ("btkOrderId".equals(name)) {     // 特定のパラメータ
>>>>> の場合、ログを出力
>>>>>                    System.out.println("(1)getAttribute:btkOrderId="+
>>>>> request.getAttribute(reqName));
>>>>>                    System.out.println("→getParameter:btkOrderId="+
>>>>> request.getParameter(reqName));
>>>>>                }
>>>>>                Object value = request.getAttribute(reqName);
>>>>>                if (value == null) {
>>>>>                    return "";
>>>>>                }
>>>>>                return value;
>>>>>            }
>>>>>        }
>>>>>        if ("btkOrderId".equals(name)) {    // 特定のパラメータの場合、ロ
>>>>> グを出力
>>>>>            System.out.println("(2)getParameter:btkOrderId="+
>>>>> request.getParameter(name));
>>>>>        }
>>>>>        Object var = request.getParameter(name);
>>>>>        if (var != null && !JsfConstants.NULL_VALUE.equals(var)) {
>>>>>            return var;
>>>>>        }
>>>>>        if ("btkOrderId".equals(name)) {    // 特定のパラメータの場合、ロ
>>>>> グを出力
>>>>>            System.out.println("(3)getAttribute:btkOrderId="+
>>>>> request.getAttribute(name));
>>>>>        }
>>>>>        var = request.getAttribute(name);
>>>>>        if (var != null) {
>>>>>            return var;
>>>>>        }
>>>>>        HttpSession session = request.getSession(false);
>>>>>        if (session != null) {
>>>>>            var = session.getAttribute(name);
>>>>>            if (var != null) {
>>>>>                return var;
>>>>>            }
>>>>>        }
>>>>>        return null;
>>>>>    }
>>>>>
>>>>> ************************************************************************
>>>>> ************
>>>>>
>>>>>
>>>>> ログを埋め込んだ結果は下記の通りとなります。
>>>>>
>>>>> request.setAttribute(btkOrderId, 799);
>>>>> (1)getAttribute:btkOrderId=799
>>>>> →getParameter:btkOrderId=829
>>>>>
>>>>> これより、一つ前の画面のID(799)が最終的にActionにセットされてしまいます。
>>>>>  
>>>>> 
>>>>>
>>>>> これは仕様ということでしょうか。
>>>>>
>>>>>
>>>>> この上記で述べたように、この画面は自アクションを呼び出すつくりになってお
>>>>> りますが、
>>>>> 自画面の詳細画面を直接指定した場合、正常に動作することは確認しております。
>>>>>  
>>>>> 
>>>>>
>>>>>
>>>>>  
>>>>> この度は、今後のシステムメンテナンスのことを考え、フレームワークの確認と
>>>>> いう意味で
>>>>> メールを出させて頂きました。
>>>>> 何卒、宜しくお願い致します。
>>>>
>>>> ---
>>>> 米 林 正 明
>>>> http://www.abby.co.jp
>>>
>>> ---
>>> 米 林 正 明
>>> http://www.abby.co.jp
>>
>> ---
>> 米 林 正 明
>> http://www.abby.co.jp
>
>---
>米林 正明
>http://www.abby.co.jp 
>
>_______________________________________________
>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


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