Uploaded image for project: 'Teeda'
  1. Teeda
  2. TEEDA-365

マルチパートのフォームでリクエストパラメータの値が Page クラスにバインドされない問題を修正しました.

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.0.10
    • Fix Version/s: 1.0.11
    • Component/s: Teeda HTML Example
    • Labels:
      None

      Description

      切り出すのが難しかったので、teeda-html-exampleを基にして再現させてみました。

      なぜかteeda-html-example-1.0.8では(JavaScriptが)うまく動作しなかった
      のでteeda 1.0.11-RC1のteeda-html-exampleで再現させました。

      foreach/forEachResult.htmlのformにenctype="multipart/form-data"を記述しただけで
      clickedIndexに画面内で最大の値(5)しか渡らなくなるのが確認できます。
      これはこのサンプルにきちんとファイルアップロードを実装しても同様の動作をします。

        Activity

        Hide
        koichik koichik added a comment -

        対応しました.
        http://svn.seasar.org/browse/?view=rev&root=teeda&revision=3583

        teeda-html-extension の web.xml にはフィルタが次の並びで定義されていました.

        1. dbSessionFilter
        2. encodingfilter
        3. s2filter
        4. hotdeployfilter
        5. extensionfilter
        6. requestDumpFilter
        7. tomahawkFilter

        リクエストパラメータを Page クラスにバインドするのは Seasar2 の外部バインディングで行われますが,Seasar2 が認識する ServletRequest は s2filter によって設定されるものです.
        しかし,その時点では tomahawkFilter は動いていないため,マルチパートのフォームだとリクエストパラメータを取得することができません.

        そこで,tomahawkFilter を s2filter の前に移動すると,マルチパートのフォームを解析した
        結果をリクエストパラメータとして取得することができる MultipartRequestWrapper が s2filter に渡るので,S2 の外部バインディングでマルチパートのフォームでもリクエストパラメータを DI できるようになります.

        そこで,フィルタの並びを次ように変更しました.

        1. extensionfilter
        2. dbSessionFilter
        3. encodingfilter
        4. tomahawkFilter
        5. s2filter
        6. hotdeployfilter
        7. requestDumpFilter
        Show
        koichik koichik added a comment - 対応しました. http://svn.seasar.org/browse/?view=rev&root=teeda&revision=3583 teeda-html-extension の web.xml にはフィルタが次の並びで定義されていました. dbSessionFilter encodingfilter s2filter hotdeployfilter extensionfilter requestDumpFilter tomahawkFilter リクエストパラメータを Page クラスにバインドするのは Seasar2 の外部バインディングで行われますが,Seasar2 が認識する ServletRequest は s2filter によって設定されるものです. しかし,その時点では tomahawkFilter は動いていないため,マルチパートのフォームだとリクエストパラメータを取得することができません. そこで,tomahawkFilter を s2filter の前に移動すると,マルチパートのフォームを解析した 結果をリクエストパラメータとして取得することができる MultipartRequestWrapper が s2filter に渡るので,S2 の外部バインディングでマルチパートのフォームでもリクエストパラメータを DI できるようになります. そこで,フィルタの並びを次ように変更しました. extensionfilter dbSessionFilter encodingfilter tomahawkFilter s2filter hotdeployfilter requestDumpFilter

          People

          • Assignee:
            koichik koichik
            Reporter:
            shot shot
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development