Play 框架 (Java) 模型验证 - 对 create() 和 update() 的不同检查
Play framework (Java) model validation - different check for create() and update()
我正在使用 Play 2.3.7,我基本上有与 this 相同的问题,但我正在使用 Java 并且我不知道 Scala。
在我的例子中,我有一个 CSVData
class 和一个 name
属性,我希望它是唯一的。在我针对 create()
和 update(Long id)
的控制器操作中,我使用
将表单绑定到此 class
Form<CSVData> formData = Form.form(CSVData.class).bindFromRequest();
如 Play documentation 中所述,validate()
函数在 bindFromRequest()
上被调用。这是我当前的验证函数:
public List<ValidationError> validate() {
List<ValidationError> errors = new ArrayList<ValidationError>();
// Unique validation on name
if(CSVData.find.where().eq("name", getName()).findRowCount() != 0) {
errors.add(new ValidationError("name", "Name must be unique. That value is already taken."));
}
// other stuff
}
很明显,我当前的解决方案存在的问题是,当调用 update()
时,数据库中已经存在具有该名称的行。 This answer 建议检查控制器操作中对象的 id
属性,然后提供一个 Scala 代码片段,但该示例包含一个用户 class,而我的应用程序没有。如何检查数据库中匹配 name
的对象是否与我当前正在更新的对象相同?我应该在 validate()
函数中还是在我的控制器中检查这个?
创建两个单独的 classes,一个用于 insert()
- InsertCsvData
,一个用于 updated()
- UpdateCsvData
,具有两种不同的 validate()
实现.可选地,创建用于存储公共 properties/behaviours.
的基 class
无法在模型的 validate()
函数中对 create()
和 update()
执行不同的验证,但您可以在各自的控制器操作中执行验证,如下所示
public static Result create() {
Form<CSVData> formData = Form.form(CSVData.class).bindFromRequest();
}
public static Result update() {
Form<CSVData> formData = Form.form(CSVData.class).bindFromRequest();
if( !formData.hasErrors() ){
if(formData.field("name").value().equals( .... ) {
// do some check here
// add ValidationError if needed
}
}
}
我之前没有考虑过直接在控制器中执行验证,但这是可能的。
我正在使用 Play 2.3.7,我基本上有与 this 相同的问题,但我正在使用 Java 并且我不知道 Scala。
在我的例子中,我有一个 CSVData
class 和一个 name
属性,我希望它是唯一的。在我针对 create()
和 update(Long id)
的控制器操作中,我使用
Form<CSVData> formData = Form.form(CSVData.class).bindFromRequest();
如 Play documentation 中所述,validate()
函数在 bindFromRequest()
上被调用。这是我当前的验证函数:
public List<ValidationError> validate() {
List<ValidationError> errors = new ArrayList<ValidationError>();
// Unique validation on name
if(CSVData.find.where().eq("name", getName()).findRowCount() != 0) {
errors.add(new ValidationError("name", "Name must be unique. That value is already taken."));
}
// other stuff
}
很明显,我当前的解决方案存在的问题是,当调用 update()
时,数据库中已经存在具有该名称的行。 This answer 建议检查控制器操作中对象的 id
属性,然后提供一个 Scala 代码片段,但该示例包含一个用户 class,而我的应用程序没有。如何检查数据库中匹配 name
的对象是否与我当前正在更新的对象相同?我应该在 validate()
函数中还是在我的控制器中检查这个?
创建两个单独的 classes,一个用于 insert()
- InsertCsvData
,一个用于 updated()
- UpdateCsvData
,具有两种不同的 validate()
实现.可选地,创建用于存储公共 properties/behaviours.
无法在模型的 validate()
函数中对 create()
和 update()
执行不同的验证,但您可以在各自的控制器操作中执行验证,如下所示
public static Result create() {
Form<CSVData> formData = Form.form(CSVData.class).bindFromRequest();
}
public static Result update() {
Form<CSVData> formData = Form.form(CSVData.class).bindFromRequest();
if( !formData.hasErrors() ){
if(formData.field("name").value().equals( .... ) {
// do some check here
// add ValidationError if needed
}
}
}
我之前没有考虑过直接在控制器中执行验证,但这是可能的。