Playframework ad-hoc表单验证已执行但不能正常工作

时间:2015-07-30 08:29:58

标签: java forms playframework-2.2

我的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

1 个答案:

答案 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