3

ファイルアップロードボックスがあるウィケットフォームがあります。ユーザーがドキュメントを添付する必要がないため、このファイル アップロード ボックスが非表示になることがあります。 フォーム objectを呼び出し ましたが、まだ (まれにしか) このエラーが発生しません。setMultiPart(true)

java.lang.IllegalStateException: ServletRequest にマルチパート コンテンツが含まれていません。考えられる解決策の 1 つは、明示的に Form.setMultipart(true) を呼び出すことです。Wicket はマルチパート フォームを自動検出するために最善を尽くしますが、それができない特定の状況があります。

役立つ事実:

  • このフォームは 1 日あたり約 10,000 回送信され、このエラーは 1 日あたり 5 ~ 10 回発生します。
  • エラーが発生したユーザーがフォームに同じデータを再度入力すると、正常に機能します。
  • エラーをローカルで複製することはまったくできませんでした。
  • このエラーを受け取った私が話した少数のユーザーは、ファイルをアップロードしていなかったと言っています。

フォーム コードの要約版を次に示します。

Form<MyObject> form = new Form<MyObject>("form")
{       
        @Override
        protected void onSubmit()
        {
        //saving stuff here
        }

        @Override
        protected void onValidate()
        {
            super.onValidate();
            //This just highlights the fields on the form:
            visitChildren( FormComponent.class, new FormValidationVisitor() );
        }
}       

add(form);
form.setMultiPart(true);
form.setMaxSize(Bytes.kilobytes( 5120 ));

フォームに追加されたカスタム Validator があり、いくつかのフォーム フィールドへの AJAX コールバックがいくつかありますが、フォーム自体は AJAXy ではありません。ブラウザで生成されたソースを見ると、次のようなフォーム宣言が表示されます。

form id="form4a" action="../wicket/page?12-1.IFormSubmitListener-form" encType="multipart/form-data" method="post" accept-charset="UTF-8"

フォームを送信するボタンは、Java 側では標準のウィケットボタンinput type="submit"であり、HTML 側では です。ただし、ブラウザーのソース ビューではjQuery18307179054977115189="23"、入力に属性が表示されます。

何か案は?私はこのバグを再現するためだけにあらゆる方法を試しましたが、あなたが与えることができるどんな助けも素晴らしいとは言えません. 私は Wicket 6.6.0 を使用しています。

4

1 に答える 1

1

ほんの数分前に同じ問題がありました。外側のフォーム内には、ファイル アップロード コンポーネント用のネストされたフォームがあります。だから、ここで私が修正した方法は次のとおりです。私の外部フォームと内部フォームの両方に setMultipart(true) があり、期待どおりに機能します。

于 2014-09-09T13:50:44.317 に答える