我有一個檢票窗體,上面有一個文件上傳框。有時這個文件上傳框是隱藏的,因爲用戶不需要附加文檔。 我呼籲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。
建議:您可以使用反引號格式化內嵌代碼,如下所示:' – nalply
感謝您爲我清潔! –
你是如何試圖重現它的? – biziclop