我需要使用此模型的验证器渲染表单:
型号:
case class Service (
name: String, description: String, unitcost: Long,
typo: Char, isactive: Char, modifiedby: String)
控制器:
import play.api.data.Form
import play.api.data._
import play.api.data.format.Formats._
import play.api.data.Forms._
object Services extends Controller {
....
....
private val servicesForm[Service] = Form(
mapping(
"name" -> nonEmptyText.verifying(
"validation.name.duplicate", Service.findByName(_).isEmpty),
"description" -> nonEmptyText,
"unitcost" -> longNumber,
"typo" -> of[Char],
"isactive" -> of[Char],
"modifiedby" -> nonEmptyText
) (Service.apply)(Service.unapply)
)
此代码在[Char] 的每个上失败,说它需要导入play.api.data.format.Formats._
但我是..
我的第二个疑问是关于如何为每个放置一个单选按钮(错字和isactive)
认为拼写错误有“M”和“A”之类的选项,而且isactive有“Y”和“N”。
PD:我认为在......之后使用持久性模型进行此操作。
答案 0 :(得分:0)
该错误表示表单不知道如何处理Char
类型。没有为Char
类型定义默认值。
要解决此问题,您有两种选择:
Char
更改为String
,其中存在默认Formatter
Formatter
Char
醇>
格式化程序看起来像这样(注意它没有正确的错误处理)
implicit val charFormat = new Formatter[Char] {
def bind(key: String, data: Map[String, String]):Either[Seq[FormError], Char] =
data.get(key)
.filter(_.length == 1)
.map(_.head)
.toRight(Seq(FormError(key, "error.required", Nil)))
def unbind(key: String, value: Char) = Map(key -> value.toString)
}