Validation 游戏框架:应用的控制器方法的自动验证?

Validation 游戏框架:应用的控制器方法的自动验证?,validation,playframework,Validation,Playframework,我对传递给控制器方法的参数的验证有一些问题 根据教程中的建议,我将使用相同的控制器方法来“保存”和“创建新的”实体。请参见中的示例 因此,我的控制器方法如下所示: public static void saveEntity(long l, Long itemId, @Required(message="error.shouldspecifyname") String name, @Required(message="error.shouldspecifycategory") S

我对传递给控制器方法的参数的验证有一些问题

根据教程中的建议,我将使用相同的控制器方法来“保存”和“创建新的”实体。请参见中的示例

因此,我的控制器方法如下所示:

public static void saveEntity(long l, Long itemId,  
  @Required(message="error.shouldspecifyname") String name, 
  @Required(message="error.shouldspecifycategory")  String category)
如果“itemId”不是通过HTTP请求发送的数据的一部分,则应将其设置为“null”

不幸的是,“播放”似乎是自动地在“缺少”参数上添加验证错误

查看验证错误列表时,每次“itemId”为“null”-我都会收到一个错误字段itemId的错误值

这是一种记录在案的行为吗?任何覆盖它的方法,或“消除”错误

我只是使用重定向来处理错误,例如:

if(validation.hasErrors() ) 
{

            validation.keep();
            showSomePage();         
}
因此,错误显示为“上下文之外”,它们是生成的。这就是“自动”错误困扰我的原因


谢谢您的提示。

很可能由于itemId声明为Long而无法验证,您确定这里有“Long”而不仅仅是“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}">

它很可能无法验证itemId,因为它被声明为Long,您确定有“Long”而不仅仅是“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}">


感谢您提出替代方案。有时,是否有方法按键删除验证?在我的试用中,“errors()”列表是原始列表的“克隆”,因此对其进行的任何操作都不会更改发送到重定向页面的数据。您不能按id删除错误,但可以使用类似以下内容:if(validation.hasrerror(“itemId”)&&validation.errors().size()==1{validation.clear();}感谢您提出的替代方案。有时,是否有方法按键删除验证?在我的试用中,“errors()”列表是原始列表的“克隆”,因此对其进行的任何操作都不会更改发送到重定向页面的数据。您不能按id删除错误,但可以使用以下内容:if(validation.hasError(“itemId”)&&validation.errors().size()==1{validation.clear();}