4

我需要为这个模型渲染一个带有验证器的表单:

模型:

    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]上都失败,说它需要 import play.api.data.format.Formats._ 但我是..

我的第二个疑问是如何为每个(错字和 isactive)思维放置一个单选按钮对该错字具有“M”和“A”之类的选项,而 isactive 具有“Y”和“N”。

PD:我认为在...之后使用持久性模型。

4

1 回答 1

0

该错误表明 Form 不知道如何处理该Char类型。没有为该Char类型定义默认值。

要解决此问题,您有两种选择:

  1. 将类型从 更改Char为存在String默认值Formatter
  2. 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)
}
于 2013-02-23T20:21:51.657 回答