• Type: Improvement
    • Resolution: Fixed
    • Priority: Minor
    • 1.0.1
    • Affects Version/s: 1.0.0
    • Component/s: ymir-core
    • None

      【概要】
      Date型の入力項目プロパティにおいて、
      画面上のテキストボックスでは何も入力しない状態でPostbackしたときに、
      Pageクラスの該当プロパティのSetterが呼び出されない。
      そのとき該当プロパティのリクエスト値は空である。

      Conversationで値を持ち回しているときに、
      一度、画面入力した値をPostbackしてConversationで保持して、
      再度、画面ではその値を空にしてPostbackすると、Date型の場合は
      Setterを呼び出さないため、Conversationの値が再度復元されてしまう。

      通常これは、あまり問題にはならないが、
      String型では、リクエスト値が空でもSetterが呼び出されて、
      Conversationの値を無視するが、Date型だと違う挙動になるので、
      このギャップが何かしらの不具合を生まないか心配である。

      例えば、入力画面と確認画面があったときに、
      入力画面には日付型のプロパティが存在しているとして:
      1. 入力画面で日付入力して確認画面へ
      2. Conversationで保持
      3. 確認画面で日付が間違っていることを確認して入力画面へ
      4. 入力画面で日付を空っぽに(日付は入れなくていいやと考え直したとする)
      5. 確認画面へ行くと、Conversation保持したさっきの値が復元される
      など
      (試してないので想像の域ですが、このような心配があります)

          [YMIR-296] *[ymir-core] Date型の入力項目プロパティでリクエスト値が空の時にSetterが呼ばれない

          skirnir made changes -
          Status Original: Resolved [ 5 ] New: Closed [ 6 ]

          skirnir added a comment -

          確認ありがとうございました。closeとします。

          skirnir added a comment - 確認ありがとうございました。closeとします。

          jflute added a comment -

          確認しました。Setterが呼ばれました。
          逆にpopulateWhereNull=falseとすることで呼ばれないことも確認しました。
          ありがとうございます!

          jflute added a comment - 確認しました。Setterが呼ばれました。 逆にpopulateWhereNull=falseとすることで呼ばれないことも確認しました。 ありがとうございます!
          skirnir made changes -
          Summary Original: Date型の入力項目プロパティでリクエスト値が空の時にSetterが呼ばれない New: *[ymir-core] Date型の入力項目プロパティでリクエスト値が空の時にSetterが呼ばれない
          skirnir made changes -
          Status Original: In Progress [ 3 ] New: Resolved [ 5 ]
          Resolution New: Fixed [ 1 ]
          Fix Version/s New: 1.0.1 [ 10867 ]

          skirnir added a comment -

          リクエストパラメータについては、Stringとそうでない場合の挙動を合わせるため、populateWhereNull=trueの挙動をさせることにしました(r2710)。変更したい場合はpopulateWhereNull=falseと明示的に指定して下さい。

          skirnir added a comment - リクエストパラメータについては、Stringとそうでない場合の挙動を合わせるため、populateWhereNull=trueの挙動をさせることにしました(r2710)。変更したい場合はpopulateWhereNull=falseと明示的に指定して下さい。

          jflute added a comment -

          議論の結果、Setterを呼ぶことに。
          但し、@RequestParameterの要素で挙動を変えられるようにする。

          jflute added a comment - 議論の結果、Setterを呼ぶことに。 但し、@RequestParameterの要素で挙動を変えられるようにする。

          jflute added a comment -

          コメントありがとうございます。

          > 考慮すべきは、どちらのケースが多いか、だと思っています。
          そうですね、PageドリブンのWEBフレームワークで言えば、
          「Pageクラスの該当プロパティのデフォルト値をコンストラクタで指定」
          というのは今までほとんどやったことなく、逆にこれは開発者にはやって
          欲しくない行為であるため、あまり必要性は感じません。
          (やるならもっと明示的にメソッドの処理の中でベタでやって欲しい)

          それよりも
          「@RequestParameterのプロパティのSetterはリクエスト時に
           とにかくリクエストで飛んできた値をセットされる」
          という仕様の方がわかりやすいかなと思います。
          「@RequestParameter」と付いてるからには、リクエストのパラメータが
          そのまま変数に射影されているのが自然かなと。

          というのが自分の意見です。

          ともあれ、そんなに直近で問題が発生する訳ではなさそうなので、
          急ぐ問題では無さそうなので、じっくり考えていく方向でいいと思います。

          jflute added a comment - コメントありがとうございます。 > 考慮すべきは、どちらのケースが多いか、だと思っています。 そうですね、PageドリブンのWEBフレームワークで言えば、 「Pageクラスの該当プロパティのデフォルト値をコンストラクタで指定」 というのは今までほとんどやったことなく、逆にこれは開発者にはやって 欲しくない行為であるため、あまり必要性は感じません。 (やるならもっと明示的にメソッドの処理の中でベタでやって欲しい) それよりも 「@RequestParameterのプロパティのSetterはリクエスト時に  とにかくリクエストで飛んできた値をセットされる」 という仕様の方がわかりやすいかなと思います。 「@RequestParameter」と付いてるからには、リクエストのパラメータが そのまま変数に射影されているのが自然かなと。 というのが自分の意見です。 ともあれ、そんなに直近で問題が発生する訳ではなさそうなので、 急ぐ問題では無さそうなので、じっくり考えていく方向でいいと思います。
          skirnir made changes -
          Status Original: Open [ 1 ] New: In Progress [ 3 ]
          skirnir made changes -
          Issue Type Original: Bug [ 1 ] New: Improvement [ 4 ]

            Assignee:
            skirnir
            Reporter:
            jflute
            Votes:
            0 Vote for this issue
            Watchers:
            Start watching this issue

              Created:
              Updated:
              Resolved: