我的Login
课程采用validate
方法,如下所示:
public static class Login {
/** The customer. */
@ManyToOne
@Constraints.Required
public Customer customer;
/** The password. */
public String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Customer getCustomer() {
return this.customer;
}
public void setCustomer(Customer c) {
this.customer = c;
}
/**
* Validate.
*
* @return the string
*/
@Transactional
public String validate() {
return "Global error";
}
}
表单绑定的代码:
Form<Login> filledLoginForm = form(Login.class);
filledLoginForm.bindFromRequest();
当我验证表格时如下:
if (filledLoginForm.hasGlobalErrors()) {
return badRequest(views.html.login.render(filledLoginForm));
} else if (filledLoginForm.hasErrors()) {
return badRequest(views.html.login.render(filledLoginForm));
} else {
return ok("OK");
}
视图:
<input type="hidden" id="customer_id" name="customer.id" value="@customer.id" />
@inputPassword(
LoginForm("password"),
'_label -> "Hasło",
'_showConstraints -> false,
'_showErrors -> false
)
我得到了正确的页面,就像没有错误一样,但在验证方法中我已经声明了它。
我使用play 2.2.6
答案 0 :(得分:1)
我建议您在控制器中明确检查。类似的东西:
final String cId = form().bindFromRequest().get("customer.id");
if (filledLoginForm.hasGlobalErrors()
|| cId==null || cId.equals("")) {
// in this case either there were some validation errors or the provided customer.id is not valid
return badRequest(yourTemplateHere.render(filledLoginForm));
}
您可以尝试的另一种方法是稍微重写validate()
方法并在那里进行检查(假设您的id
类中有Customer
字段):
public String validate() {
return Customer.id != null ? null : "Oh no, the customer id is empty";
}
P.S。同时拥有公共字段和setter / getter有点令人困惑 - 切换到公共字段或将它们设为私有并使用getter和setter