2014-02-11 92 views
0

聲明:我希望在開始使用框架之前瞭解了一下。但是就目前而言,我缺乏這一方面,因此也就是問題所在。ErrorBinding Spring portlet MVC

我正在使用Spring-Portlet MVC。

我有一個流程,其中我在屏幕上進行輸入,驗證輸入,根據其結果,呈現相同的屏幕或下一個屏幕。

實現細節:

我有一個動作方法,其採用的形式支持命令對象。它檢查輸入的輸入是否有效。如果它無效,它會在BindingResult實例中填充錯誤消息,它將作爲另一個參數。

我們有不同的渲染方法來渲染不同的屏幕。

我在這些渲染方法中將命令對象作爲參數。我收到的這個命令對象與傳遞給action的命令對象相同。

問題:

雖然重新描繪的屏幕彈簧-MVC應綁定填充在操作方法的錯誤消息。目前,當我將命令對象作爲render方法中的參數時,spring-mvc以某種方式無法綁定該錯誤消息。但是有趣的是,如果我不在render方法中將命令對象作爲參數,而是在那裏創建一個新的命令對象,它就能夠綁定錯誤消息。

可以,有一個更好地瞭解spring-portlet mvc的人請解釋這種行爲,或者告訴我缺乏理解。

問候,

Mawia

編輯:只是爲了充實以下答案:雖然我沒有完全隔離這是造成上述現象的問題,但我遇到了我的要求是使用的ModelAttribute方式。 ModelAttribute可用於方法或方法的參數。它確保模型將可用於所有的調用,直到渲染視圖(這是我的理解!)。因此,我們不需要將命令對象作爲Render方法中的參數,只需使用ModelAttribute在action方法中註釋commandObject參數,然後就可以從下面的答案中建議的模型返回同一個對象。

回答

1

我不認爲命令/模型對象應該是render方法中的參數/參數。當命令/模型被定義爲渲染方法簽名中的參數時,我有同樣的問題試圖獲取驗證錯誤消息。我通常在一個單獨的方法命令/對象創建/填充,比如:

@ModelAttribute(value="address") 
public Address getAddress(@RequestParam Integer id){ 
    Address address = null; 
    if(id != null){ 
     address = myService.getAddress(id); 

    }else{ 
     address = new Address(); 
    } 
    return address; 
} 

如果我仍然需要從渲染方法訪問的ModelAttribute /命令對象,我通常通過獲得它:

@RenderMapping 
public String showAddressPage(ModelMap modelMap){ 
    Address address = modelMap.get("address"); 

    //make any additional changes to address 

} 

我用這個例子作爲參考article