[英]Spring MVC Binding Command Object Using Get Request
我需要實現一個具有命令對象的控制器,該命令對象支持用於跨多個條目進行搜索的過濾表單。
問題在於,我被要求不使用POST請求而僅使用GET請求來執行此操作,然后再失去默認的數據綁定功能,這對我們來說是一件很愉快的事情。
所以我試圖在我的控制器內部實現一個像這樣的方法:
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws Exception {
if (isSearchRequest(request)) {
MyCommandObject myCommandObject = (MyCommandObject) getCommand(request);
System.out.println(managePositionsForm);
}
return super.handleRequestInternal(request, response);
}
但是,盡管請求對象中存在值,但getCommand返回了一個沒有值的全新CommandObject(我可以使用HttpServletRequest的getParameter方法進行檢索)。 但是沒有任何約束力。
所以問題是:
1)有什么辦法可以存檔嗎?
2)同樣非常重要的是,表格中的所有值都將丟失,並且最終(如果解決了此問題)我將需要為用戶“保留”過濾器,以避免在第一次搜索后重新輸入。
謝謝大家!
問候
勝利者。
Okey,我找到了一種存檔所需內容的方法。
我將為那些以前遇到過相同問題的人進行解釋,並希望找到有經驗的用戶來驗證此方法...一些安靜的共同點是,有多種方法可以做相同的事情,而人類很難知道沒有正確地確認正確的路徑..因此,我發現它在AbstractFormController內部查找(這在javadoc中有很好的記錄)。
所以我要做的是,在我的控制器構造函數的末尾添加這些行:
setSessionForm(true);
setBindOnNewForm(true);
那一切神奇!
但是使用setSessionForm(true)還不夠。 根據javadoc,setBindOnNewForm(boolean)方法執行以下操作:
/**
* Set if request parameters should be bound to the form object
* in case of a non-submitting request, i.e. a new form.
*/
因此,我的猜測是必須將這兩個標志標記為true,因為:
但是,我仍然注意到,在控制器流中使用調試器后,填充正在方法“ getErrorsForNewForm(HttpServletRequest request)”中發生。. 如果 setBindOnNewForm為true,則在其中使用ServletRequestDataBinder類型的具體對象,以后(如javadoc所述),將調用onBindOnNewForm方法,從而允許程序員使用自定義行為覆蓋它,默認行為只是空的(再次針對AbstractFormController的代碼進行了仔細檢查)。
我很想在這里驗證我的想法,因此,如果有任何人可以幫助我,那除了解決問題之外,還可以!
預先感謝所有人!
問候。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.