播放2 - Scala - 表单验证器和单选按钮

时间:2012-10-24 17:52:38

标签: scala playframework playframework-2.0

我需要使用此模型的验证器渲染表单:

型号:

    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:我认为在......之后使用持久性模型进行此操作。

1 个答案:

答案 0 :(得分:0)

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

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

  1. 将类型从Char更改为String,其中存在默认Formatter
  2. Formatter
  3. 提供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)
    }