2011-11-20 23 views
1

我有一個網站模型,它有一個@Required User owner屬性。該屬性在控制器方法內部被填充。但是,在進入控制器方法時檢查驗證,所以它認爲對象是無效的(因爲當時是這樣)。可以將驗證與控制器中增強的參數一起使用嗎?

應該玩!驗證是否用於此目的?

我應該放棄@Valid註釋並使用validation.required(website)手動檢查嗎?

更新 - 使用validation.required(website)只驗證網站不爲空,但它不會運行驗證網站上的任何註釋。如果我沒有使用@Valid參數註釋,這是否意味着我不能在模型本身上使用基於註釋的驗證?什麼是程序員要做的?

Update2 - 似乎我應該叫validation.valid(website)而不是validation.required(website)。我還爲add()方法參數(而不是@Valid)添加了@Required註釋。這是它應該完成的方式嗎?

@Entity 
public class Website extends PortalModel { 
    @Required 
    public String url; 

    @Required 
    @ManyToOne 
    public User owner; 
} 

public class Sites extends UserAwareControllerBase { 
    public static void added(@Valid Website website) { 
     website.owner = getUser(); // from base class 

     if (Validation.hasErrors()) { 
      Validation.keep(); 
      params.flash(); 
      add(); 
     } 

     websiteRepo.save(website); 
     edit(website.id); 
    } 
} 

回答

1

我不知道是否有申報用戶爲@Required點,如果你的應用程序的用戶都對它沒有影響。那麼,這是你自己的代碼的安全網。

但由於用戶是不是在當您提交的網站形式的參數,你必須手動驗證:

website.owner = getUser(); 
validation.valid(website); 
... 
+0

的事情是我一種誤解驗證註釋在任何時候都保持在實體是持久的,而它們更像是Controllers圖層上的過濾器。我希望有一些方法可以在持久時間使用這些註釋來實施驗證規則。 現在雖然'validation.valid()'很好,謝謝。 – ripper234

+0

他們都是,這就是爲什麼你可以使用相同的註釋在控制器和模型內註釋。 –

+0

我的模型被註釋了,但壞的對象仍然被保留。我剛剛看到這篇文章,如何確保這不會發生:https://groups.google.com/d/msg/play-framework/MofQCKoZ9RE/2gYrX3l5lOoJ – ripper234

相關問題