shinya okino
shiny****@gmail*****
2009年 5月 19日 (火) 07:22:48 JST
沖野です。 連投ですいませんが、中途半端な事ばかり書いていたので 自分の推測を詳しく書くと 今のWicketでは古いページ情報はディスクにシリアライズして保存されます。 ブラウザで戻った場合はそれをデシリアライズするので、この時点でセッションのオブジェクトとは 別インスタンスになっているのだと考えられます。 なので毎回セッションからModelObjectを取り出せば同期が取れると意味で書きました。 情報をページのフィールドにしても動きは変わらないので ページを作成したときと復元してときではインスタンスは別物という前提で作った方が 良いと思います。 書いていて違うような気もしてきましたが、以上です。 2009/05/19 2:38 shinya okino <shiny****@gmail*****>: > 沖野です。 > >>> >毎回セッションからModelObjectを取り出す >>> と言うのが、どの部分になるのか分からないです。 >>> 一応、最後のページ(最初のメールで言うD画面です)ではAbstractReadOnlyModelの >>> getObjectメソッドをオーバーライドしてLabelに食わせてはいるのですが、 >>> これだけでは足りないのでしょうか? >> 最後のページだけではなくて全部のページで同じようにしても駄目でしょうか? > すいません。FormComponentでこれをやるとエラーになってしまいますね。 > >>・Submitは使用せず、AjaxFormChoiceComponentUpdatingBehaviorや、AjaxFormComponentUpdatingBehaviorを用いて > 直接 ModelObject(Formビーン)に設定しています。 > このときにgetSession()でModelObjectを取得して値を設定してみたらどうでしょうか? > > 2009/05/19 2:18 shinya okino <shiny****@gmail*****>: >> 沖野です。 >> >>> >毎回セッションからModelObjectを取り出す >>> と言うのが、どの部分になるのか分からないです。 >>> 一応、最後のページ(最初のメールで言うD画面です)ではAbstractReadOnlyModelの >>> getObjectメソッドをオーバーライドしてLabelに食わせてはいるのですが、 >>> これだけでは足りないのでしょうか? >> 最後のページだけではなくて全部のページで同じようにしても駄目でしょうか? >> >> >> 2009/05/18 22:47 福光淳一 <fukum****@beat2*****>: >>> fukumitsuです。 >>> >>> 沖野様、レスありがとうございました。 >>> アクションが遅くなってすみません。 >>> >>> セッションはインスタンス変数にfinalでgetSession()した自作セッションクラスから >>> getメソッドで取得はしています。 >>> >>> >毎回セッションからModelObjectを取り出す >>> と言うのが、どの部分になるのか分からないです。 >>> 一応、最後のページ(最初のメールで言うD画面です)ではAbstractReadOnlyModelの >>> getObjectメソッドをオーバーライドしてLabelに食わせてはいるのですが、 >>> これだけでは足りないのでしょうか? >>> >>> 色々考えた結果、やはりセッションを使う場合はページバージョンとブラウザ履歴とセッション内容が >>> ずれるんじゃないのかなぁ?と思います。 >>> Formビーンを纏めたクラスを最初のページ?で生成して、各ページのコンストラクタで渡していくしかないのかな?と思いました。 >>> >>> ブラウザの戻る対応で同じ様な事が発生して人は居られないのでしょうか? >>> 悩ましい所です。はい。 >>> >>> 以上、よろしくお願いします。 >>> >>> >>> >>> ----- >>> Date: Sun, 17 May 2009 00:40:03 +0900 >>> From: shinya okino <shiny****@gmail*****> >>> Subject: [Wicket-ja-user 331] Re:ページのステートとセッションオブジェクトについて >>> >>>> 沖野です。 >>>> おそらくはページのシリアライズ・デシリアライズでModelObjectが別インスタンスに >>>> なっているのではないかと思います。 >>>> 毎回セッションからModelObjectを取り出さないとうまくいかないと思います。 >>>> >>>> 違う要因だったらすいません。 >>>> >>>> 2009/05/15 10:19 fukumitu <fukum****@beat2*****>: >>>> > はじめまして。 >>>> > fukumituと申します。 >>>> > >>>> > いつもはROM専門だったのですが、どうもいい考えが思いつかないのでMLに投げさせて >>>> > いただきます。 >>>> > >>>> > 現在、wicketを使用して複数の入力ページと内容確認表示ページがあるWEBアプリを >>>> > 作成しておりますが、「ブラウザの戻るボタンにも対応している」と聞いていたので >>>> > 色々調べていました。 >>>> > >>>> > ・入力用のFormビーンは、セッション上に保持しています。 >>>> > ・Submitは使用せず、AjaxFormChoiceComponentUpdatingBehaviorや、AjaxFormComponentUpdatingBehaviorを用いて >>>> > 直接 ModelObject(Formビーン)に設定しています。 >>>> > >>>> > 入力画面がA,B,C、確認画面がDとした場合、正しいルートで >>>> > (1)A(次へ)→(2)B(次へ)→(3)C(次へ)→(4)D(修正)→(5)B(完了)→(6)Dとした場合、 >>>> > 「ブラウザの戻るボタン」で(2)まで戻った場合、(5)で入力した内容が表示されません。 >>>> > >>>> > ここまではブラウザのキャッシュが表示されている為想定通りですので問題はありませんが >>>> > この時点でセッション上のFormビーンと画面上の差異が発生しています。 >>>> > >>>> > さらにこの(2)Bでさらに変更し、(次へ)でDまで到達すると一見、正しくFormビーンに >>>> > 値が入ってはいるのですが、Dでは変更前の値が取得できてしまいます。 >>>> > getSession()を調べてみたところ全然違う物を参照しておりました。 >>>> > どうもTextFieldに入力した時点で変わっている様です。 >>>> > >>>> > 推論なのですが、この時点で新たなステートが生成されていて以下のような感じに >>>> > なっているのかな?と考えました。 >>>> > >>>> > (1)A(次へ)→(2)B(次へ)→(3)C(次へ)→(4)D(修正)→(5)B(完了)→(6)D(戻る)→ >>>> > (5)B(戻る)→(4)D(戻る)→(3)C(変更)→(7)C(次へ)→(4)D >>>> > >>>> > そこで質問なのですが(前振り長くてごめんなさい)、 >>>> > 1.Wicket的にはステートフルを目指しているので、ステートフルな入力ページ情報は、 >>>> > 基本的にページインスタンス変数に持つべきなのでしょうか? >>>> > 2.その場合、複数ページにある入力情報へはどのようにアクセスするべきでしょうか? >>>> > >>>> > 以上、どなたかご存知であればよろしくお願いいたします。 >>>> > >>>> > _______________________________________________ >>>> > Wicket-ja-user mailing list >>>> > Wicke****@lists***** >>>> > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user >>>> > >>>> >>>> >>>> -- >>>> 沖野信也 >>>> shiny****@gmail***** >>>> >>>> _______________________________________________ >>>> Wicket-ja-user mailing list >>>> Wicke****@lists***** >>>> http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user >>> >>> _______________________________________________ >>> Wicket-ja-user mailing list >>> Wicke****@lists***** >>> http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user >>> >> >> >> >> -- >> 沖野信也 >> shiny****@gmail***** >> > > > > -- > 沖野信也 > shiny****@gmail***** > -- 沖野信也 shiny****@gmail*****