Wicket表单“ServletRequest不包含多部分内容”

时间:2013-03-28 16:25:20

标签: forms file-upload wicket multipartform-data wicket-6

我有一个wicket表单,上面有一个文件上传框。有时会隐藏此文件上载框,因为用户无需附加文档。 我在表单对象上调用了 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 ));

在表单中添加了一个自定义Validator,并且对某些表单字段有一些AJAX回调,但表单本身不是AJAXy。在浏览器中查看生成的源代码,我得到的表单声明如下:

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

提交表单的按钮是Java端的标准wicket Button 和HTML端的input type="submit",尽管在浏览器源视图中我确实看到{{1输入属性。

有什么想法吗?我已经尝试了每一种方式只是为了复制这个错误而且不能这样任何帮助你可以给予的将是伟大的。我正在使用Wicket 6.6.0。

1 个答案:

答案 0 :(得分:1)

几分钟前我遇到了同样的问题。在外部表单中,我有一个用于文件上载组件的嵌套表单。 所以,这是我修复的方式: 我的外部和内部形式都有setMultipart(true),它按预期工作。