我有一個網站模型,它有一個@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);
}
}
的事情是我一種誤解驗證註釋在任何時候都保持在實體是持久的,而它們更像是Controllers圖層上的過濾器。我希望有一些方法可以在持久時間使用這些註釋來實施驗證規則。 現在雖然'validation.valid()'很好,謝謝。 – ripper234
他們都是,這就是爲什麼你可以使用相同的註釋在控制器和模型內註釋。 –
我的模型被註釋了,但壞的對象仍然被保留。我剛剛看到這篇文章,如何確保這不會發生:https://groups.google.com/d/msg/play-framework/MofQCKoZ9RE/2gYrX3l5lOoJ – ripper234