gpt4 book ai didi

java - Play Framework : How to validate a subset of fields in an object?

转载 作者:搜寻专家 更新时间:2023-11-01 00:58:21 25 4
gpt4 key购买 nike

我有一个具有许多属性的用户对象。在我的编辑配置文件屏幕中,我显示了这些属性的一个子集。在相应的 Controller 操作中,我如何才能只验证那些正在编辑的字段而不是用户对象中的所有字段?

我已经使用 MaxSize、Email、URL 等约束条件对用户对象中的字段进行了注释,并且不想通过手动验证每个字段来再次重复它们。

任何指针将不胜感激。谢谢!

最佳答案

最简单的方法是将完整的对象传递给接收方法并验证所有对象。由于您只编辑字段的子集,因此它们将是唯一发生变化的字段,并且如果验证失败,它们将触发错误。当然,这是假设您从不在数据库中存储无效对象!

如果没有,您还可以创建一个不从模型扩展的支持 bean,带有验证标记,并将其传递给表单和 Controller 。像这样的东西:

public class SupportBean {
@Email
public String mail;
@Max(3)
public int size;
//etc, add getters and setters as I'm not sure if it is required.
}

在这两种情况下都是这样的,如果需要的话,用一个临时对象替换完整的对象 User(仔细检查代码,我这里没有 Play 环境,我可能会犯一些拼写错误/小错误)

*{ assuming parameter 'user' is passed in the render method that creates this view }*
#{form @controller.save()}
#{field 'user.name'}
<p>
<label>&{field.name}</label>
<input type="text" id="${field.id}" name="${field.name}" value="${field.value}" class="${field.errorClass}">
<span class="error">${field.error}</span>
</p>
#{/field}
*{ add more field the same way }*
#{/form}

然后在 Controller 中:

*{ we tag required for validation }*
public static void save(@Valid User user) {
checkAuthenticity();
if(validation.hasErrors()){
//there are errors, add to flash and redirect to edit page
} else {
user.save();
//redirect
}
}

添加一个 POST 规则来“保存”路由文件,您就可以开始了。

该框架有一个示例项目(validation 我认为它的名称),其中包含 7 种不同的验证方式。最后一个使用 JQuery 来重用您的类的验证标记,并在提交之前在客户端中运行相同的验证。看看他们,他们可能会帮助你很多:)

关于java - Play Framework : How to validate a subset of fields in an object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5973329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com