3

我有一个检票口表格,上面有一个文件上传框。有时这个文件上传框是隐藏的,因为用户不需要附加文档。 我已经调用 setMultiPart(true) 了表单对象,但我仍然(但很少)得到这个错误:

java.lang.IllegalStateException:ServletRequest 不包含多部分内容。一种可能的解决方案是显式调用 Form.setMultipart(true),Wicket 会尽力自动检测多部分表单,但在某些情况下它不能。

有用的事实:

  • 此表单每天提交约 10,000 次,我每天收到此错误 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 ));

表单中添加了一个自定义验证器,并且对某些表单字段有一些 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 回答