【问题标题】:Playframework ad-hoc form validation is executed but does not work as it supposePlayframework ad-hoc 表单验证已执行,但无法正常工作
【发布时间】:2015-07-30 08:29:58
【问题描述】:

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

【问题讨论】:

  • 请贴出你如何做表单绑定的代码
  • 我已经发布了。你是这个意思吗?我没有更多了。
  • 还发布此Login 对象由用户填充数据的视图。客户是如何被选中的?

标签: java forms playframework-2.2


【解决方案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() 方法并在那里进行检查(假设您的 Customer 类中有一个 id 字段):

public String validate() {
    return Customer.id != null ? null : "Oh no, the customer id is empty";
}

附:同时拥有公共字段和 setter/getter 有点令人困惑 - 切换到公共字段或将它们设为私有并使用 getter 和 setter

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 2012-04-22
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    相关资源
    最近更新 更多