2013-03-28 4 views
3

У меня есть калитка, на которой есть поле для загрузки файлов. Иногда это поле для загрузки файлов скрыто, потому что пользователю не требуется прикреплять документацию. я назвалsetMultiPart(true)на форме объекта, но я до сих пор (но редко) получаю эту ошибку:Форма калитки «ServletRequest не содержит многостраничный контент»

java.lang.IllegalStateException: ServletRequest does not contain multipart content. One possible solution is to explicitly call Form.setMultipart(true), Wicket tries its best to auto-detect multipart forms but there are certain situation where it cannot.

Полезные факты:

  • Эта форма получает подано около 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 обратных вызовов на некоторые из полой формы, но сама форма ISN 't 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.

+0

Совет: вы можете форматировать встроенный код с обратными кавычками, например: ' – nalply

+1

Спасибо, что убрали это для меня! –

+0

Как вы пытались воспроизвести его? – biziclop

ответ

1

У меня была такая же проблема всего несколько минут назад. Внутри внешней формы у меня есть вложенная форма для компонента загрузки файлов. Итак, вот как я исправил: Мои внешние и внутренние формы имеют setMultipart (true), и он работает так, как ожидалось.