【问题标题】:Wicket form "ServletRequest does not contain multipart content"检票表单“ServletRequest 不包含多部分内容”
【发布时间】:2013-03-19 04:51:24
【问题描述】:

我有一个检票口表格,上面有一个文件上传框。有时这个文件上传框是隐藏的,因为用户不需要附加文档。 我已在表单对象上调用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 端的标准检票口 Button 和 HTML 端的 input type="submit",尽管在浏览器源视图中我确实看到了 jQuery18307179054977115189="23" 属性输入。

有什么想法吗?我已经尝试了所有方法来复制这个错误并且不能所以你可以提供的任何帮助都会很棒。我正在使用 Wicket 6.6.0。

【问题讨论】:

  • 提示:您可以使用反引号格式化内联代码,如下所示:`
  • 感谢您为我清理!
  • 你是如何尝试重现它的?
  • 是的,但我没有做任何事情给我错误。我试过用一百万种不同的方式填写表格,我试过在提交表格之前让会话超时,我试过输入无效数据……等等等等。看到日志中出现错误并且不知道如何复制它是非常令人沮丧的。
  • 您是否在提交之前通过使用浏览器后退按钮导航到表单进行了测试?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-07-23
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多