2013-03-28 30 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.

有用的事實:

  • 這種形式得到每天提交的約10000倍我每天得到這個錯誤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 AJAXy。看着在瀏覽器中生成的源我得到的形式聲明看起來像這樣:

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

提交表單的按鈕是在Java端標準檢票按鈕和在HTML側的input type="submit",雖然在瀏覽器源視圖中,我確實在輸入上看到了jQuery18307179054977115189="23"屬性。

任何想法?我試過每一種方式只是爲了複製這個bug,不能讓任何幫助你的人都會很棒。我正在使用Wicket 6.6.0。

+0

建議:您可以使用反引號格式化內嵌代碼,如下所示:' – nalply

+1

感謝您爲我清潔! –

+0

你是如何試圖重現它的? – biziclop

回答

1

我幾分鐘前就有同樣的問題。在外部窗體中,我有一個用於文件上傳組件的嵌套窗體。 所以,這裏是我如何修復: 我的外部和內部窗體都有setMultipart(true),它按預期工作。