playframework - Play! 中的分组形式错误框架

标签 playframework

有没有一种简单的方法可以在表单顶部而不是在每个字段上方对表单错误进行分组?

这是我的 Scala 模板:

@(registrationForm: Form[User])

@implicitField = @{ FieldConstructor(views.html.helper.twitterBootstrap2.twitterBootstrap2FieldConstructor.f) }

@import helper._

@helper.form(action = routes.Registration.index) {

    <fieldset>

        @if(registrationForm.hasGlobalErrors) { 
            <div class="alert alert-error">
            <a class="close" data-dismiss="alert">×</a>
                @registrationForm.globalError.message
            </div>
        }

        <legend>Register</legend>

        @inputText(
            registrationForm("firstName"),
            '_label -> "First Name",
            '_showConstraints -> false,
            '_showErrors -> true,
            '_error -> registrationForm.error("firstName")
        )

        @inputText(
            registrationForm("lastName"),
            '_label -> "Last Name",
            '_showConstraints -> false,
            '_showErrors -> true,
            '_error -> registrationForm.error("lastName")
        )

        @inputText(
            registrationForm("emailAddress"),
            '_label -> "Email Address",
            '_showConstraints -> false,
            '_showErrors -> true,
            '_error -> registrationForm.error("emailAddress")
        )

        @inputPassword(
            registrationForm("password"),
            '_label -> "Password",
            '_showConstraints -> false,
            '_showErrors -> true,
            '_error -> registrationForm.error("password")
        )

        @inputPassword(
            registrationForm("password"),
            '_label -> "Confirm Password",
            '_showConstraints -> false,
            '_showErrors -> true,
            '_error -> registrationForm.error("password")
        )

    </fieldset>

    <button type="submit" class="btn">Register</button>

}

我正在执行自定义验证以检查唯一的电子邮件地址,并根据该验证向全局错误添加错误。我希望将任何其他错误(由于验证其他字段而抛出)与表单顶部的此错误组合在一起。有什么建议吗?

最佳答案

在您的 @if(registrationForm.hasGlobalErrors){ 中,您总是可以尝试调用 registrationForm.globalErrors 来获取所有错误的列表,遍历它并输出消息每个?

例子:

@if(registrationForm.hasGlobalErrors){
    <div class="alert alert-error">
         @for(validationError <- registrationForm.globalErrors){
              <a class="close" data-dismiss="alert">×</a>
              @validationError.message
         }
    </div>
}

编辑:应下面评论的要求,我正在更新我的答案,以包含一种用于对自定义验证消息进行分组的替代方法,这可能不是“最佳”解决方案,但应该可以做到这一点。

在你的 Controller 中:

if(filledForm.hasErrors()){

       for(String key : filledForm.errors().keySet()){
           List<ValidationError> currentError = filledForm.errors().get(key);
           for(ValidationError error : currentError){
               flash(key, error.message());
           }
       }
}

或者您可以使用迭代器,无论您喜欢哪个。

然后在您看来是这样的:

@if(flash.size() > 0){
    <div class="alert-alert error">
        @for((key, value) <- flash){
            <strong>Error : </strong> @value<br />
        }
    </div>
}

正如我提到的,这不是最优雅的解决方案,但它应该会在页面顶部列出您的错误。

关于playframework - Play! 中的分组形式错误框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376228/

相关文章:

scala - 使用 Play 框架下载大文件

playframework - 我应该使用 Play 框架 2.0 还是使用 Play 1.x

javascript - 使用 Play 框架 Scala 模板的 onclick 事件

playframework - 在play 2.3.3中,实体一定要get set?

parsing - Play 2.0 框架,使用带有经过身份验证的请求的 BodyParser

scala - Steam OpenId 和 Play 框架

scala - Play (Scala)在同一 Action 中处理不同的内容类型

json - 具有 json 解析器的单元测试 Play Controller 操作

java - Play 框架 - 如何共享表?

playframework - Securesocial View 定制