2012-03-04 45 views
1

我在驗證傳遞給控制器​​方法的參數時遇到了一些問題。Play Framework:應用控制器方法的自動驗證?

遵循教程的建議,我使用相同的控制器方法來爲實體「保存」和「創建新的」。見 http://www.playframework.org/documentation/1.2.4/guide9

例如所以,我的控制器方法是這樣的:

public static void saveEntity(long l, Long itemId, 
    @Required(message="error.shouldspecifyname") String name, 
    @Required(message="error.shouldspecifycategory") String category) 

如果「ITEMID」不是通過HTTP請求發送的數據的一部分 - 它應該被設置爲「空」 。

不幸的是,它似乎是「玩」自動添加驗證錯誤的「失蹤」參數。

當尋找到驗證錯誤列表中,每次‘ITEMID’是‘空’ - 我得到一個錯誤不正確的值現場的itemId

它是一個記錄的行爲?任何方式來覆蓋它,或「擺脫」的錯誤。

我處理錯誤簡單地使用重定向,如:

if(validation.hasErrors()) 
{ 

      validation.keep(); 
      showSomePage();   
} 

所以會顯示錯誤「走出上下文」他們得到產生。這是「自動」錯誤困擾我的原因。

感謝您的任何提示。

回答

1

最有可能它無法驗證itemId,因爲它被聲明爲Long,你確定你有「長」有螞蟻不只是「長」?我們正在使用控制器驗證每個位置,它和@Required一起工作,並將「null」傳遞給「Long」值。

最壞的情況,你可以從驗證對象依據「的itemId」鍵刪除錯誤,也如果你使用控制器以節約模型對象,你可能想使用:

public static void saveEntity(@Required @Valid MyEntity entity) { 
if(validation.hasErrors()) { 
    validation.keep(); 
    showSomePage();   
} 
entity.save(); 
} 

它將會被自動鉤住你的現有實體內部的變化,如果您通過頁面上的ID:

<input type="hidden" name="myEntity.id" value="${myEntity.id}"> 
+0

感謝您提供替代方案。偶爾,有沒有一種方法可以通過鍵刪除驗證?在我的試驗中,「errors()」列表是原始列表的「克隆」,因此對它的任何操作都不會更改發送到重定向頁面的數據。 – Max 2012-03-05 07:57:31

+0

你不能通過id去除錯誤,但你可以使用類似if(validation.hasError(「itemId」)&& validation.errors()。size()== 1){\t \t \t validation.clear() ; } – 2012-03-05 08:58:03