播放框架表单错误处理

时间:2015-06-14 20:45:13

标签: scala playframework playframework-2.3 playframework-2.4

这是我的视图文件,其中包含必须由用户填写的表单:

@helper.form(call) {
    @helper.input(resumeForm("surname"), '_label -> "Surname") { (id, name, value, args) =>
        <input name="@name" type="text" value="@value" placeholder="Enter your surname">
    }
}

这是我的自定义字段构造函数:

@(elements: helper.FieldElements)

@if(!elements.args.isDefinedAt('showLabel) || elements.args('showLabel) == true) {
    <div class="input-with-label text-left">
        <span>@elements.label</span>
        @elements.input
    </div>
} else {
    @elements.input
}

现在我陷入两难境地。如果输入的值没有清除验证,我需要将类field-error添加到输入中,我需要添加data-toggledata-placementtitle。但是,我不知道有任何方法可以检查特定字段是否存在错误。实现这个的最佳方法是什么?我已经考虑过使用inputText或其他东西但基本上与基础input相同,因此也无法访问任何错误。我也无法改变字段构造函数中elements.input的HTML。

1 个答案:

答案 0 :(得分:1)

查看play documentation编写自己的字段构造函数。 您可以在自定义字段构造函数的模板中使用@if(elements.hasErrors)检查错误。

<div class="input-with-label text-left @if(elements.hasErrors){field-error}">
    ...

修改

您可以通过args参数将字段的错误状态传递给您的输入。来自播放文档:

  

注意:所有额外参数都将添加到生成的HTML中,但名称以_字符开头的参数除外。以下划线开头的参数保留给字段构造函数参数(稍后我们将看到)。

您需要转换为匹配类型。

@input(resumeForm("surname"), '_label -> "Surname", 'hasErrors -> resumeForm("surname").hasErrors) { (id, name, value, args) =>
    <input name="@name" type="text" value="@value" placeholder="Enter your surname"
        class="@if(args.get('hasErrors).map(_ match { case x:Boolean => x}).get){field-error}">
}