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>
标签中,而底部则是“必需”标志,我不会知道如何删除。
以下是它的外观图像:
有关如何让表单看起来一致的任何提示?
感谢。
答案 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
。如果您的表单由案例类(或其他映射逻辑)支持,则您必须相应地更改它。