【问题标题】:Mapping Play Framework form element to custom type将 Play Framework 表单元素映射到自定义类型
【发布时间】:2016-03-06 23:08:39
【问题描述】:

我想将表单元素映射到java.sql.Time,就像我可以映射java.sql.Date一样。我有以下代码:

  case class Item (timeField: java.sql.Time, dateField: java.sql.Date)
  val itemForm = Form(
    mapping(
      "timeField" -> sqlDate("H:mm"),
      "dateField" -> sqlDate("yyyy\M\d")
    )(Item.apply)(Item.unapply)
  )

Mapping do dateField 效果很好,但是否可以创建自定义映射,例如时间场?我期待这样的事情

  val itemForm = Form(
    mapping(
      "timeField" -> sqlTime("H:mm"), //my own mapping function
      "dateField" -> sqlDate("yyyy\M\d")
    )(Item.apply)(Item.unapply)
  )

【问题讨论】:

    标签: forms scala playframework mapping


    【解决方案1】:

    您可以使用自定义格式化程序来实现此目的。代码看起来像这样:

    def sqlTime(pattern: String) = of(sqlTimeFormat(pattern))
    
    def sqlTimeFormat(pattern: String): Formatter[java.sql.Time] = new Formatter[java.sql.Time] {
      def bind(key: String, data: Map[String, String]) = {
        try {
          val sdf = new SimpleDateFormat(pattern)
          Right(new java.sql.Time(sdf.parse(data.getOrElse(key, "")).getTime))
        } catch {
          case e: Exception => Left(List(FormError(key, "Your error message")))
        }
      }
      def unbind(key: String, value: java.sql.Time) = Map(key -> value.formatted(pattern))
    }
    

    注意:我没有对此进行测试,您可能需要进行一些调整,但应该很接近。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多