文本域与斯卡拉玩形式帮手

时间:2013-02-20 23:26:27

标签: scala playframework playframework-2.0 textfield

Scala表单助手不像我期望的那样一致

@form(action = routes.Admin.insertNewArticle, 'class -> "form-horizontal") {
  <fieldset>
    @textarea(field = articleForm("text"), args = 'rows -> 3, 'cols -> 50)
    @input(articleForm("author"), "author")
  </fieldset> 
}

input字段看起来非常好,左侧有标签,右侧有字段。但是textarea只是很奇怪,它没有包含在带有标签的<div>中,但是它位于<dl>标签中,而底部则是“必需”标志,我不会知道如何删除。

以下是它的外观图像:

enter image description here

有关如何让表单看起来一致的任何提示?

感谢。

1 个答案:

答案 0 :(得分:3)

您有几个选择。

首先,您可以覆盖帮助程序,只需为textarea控件添加自己的手动HTML。这在"Using the form template helpers"下的“自己处理HTML输入创建”部分的文档中进行了描述,并且描述了常见的陷阱here。如果你想要一个包含标签的div,你可以这样做:

@helper.input(field = articleForm("text")) { (id, name, value, args) =>
    <div>
        <label>text</label>
        <textarea name="@name" id="@id" rows='3' cols='50'>@value</textarea>
    </div>
}

您还可以使用CSS来设置textarea助手生成的默认HTML的样式。 <dl>标记只是一个definition list,可以像任何HTML列表一样设置样式。作为参考,您可以在github中找到默认的字段构造函数代码,它会显示生成的html的外观。

我认为您所谈论的“必需”符号是您在生成的HTML中可以看到的错误<dd>标记。如果你没有使用手动滚动的HTML路由,那么要摆脱它,你需要定义自己的字段构造函数。我在上面链接的Play帮助页面中也对此进行了描述。但是,如果你关心的只是摆脱错误,它应该很简单,只需复制默认的字段构造函数代码(也在上面链接),并改变或只删除读取@if(elements.hasErrors) {error}和以@elements.errors(elements.lang).map开头的三行。 “必需”错误本身来自@elements.infos...

或者该字段应该是否需要?这是表单定义的问题,而不是帮助程序。使表单中的“文本”字段可选,如“{可选值”下的Scala Forms help page所示。例如,如果您的任务定义位于Application.scala

   val taskForm = Form (
     "text" -> optional(text) // changed from 'nonEmptyText'
   )

这也会使“文字”字段映射为Option[String]而不是普通String。如果您的表单由案例类(或其他映射逻辑)支持,则您必须相应地更改它。