Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 将Play Framework表单元素映射到自定义类型_Forms_Scala_Playframework_Mapping - Fatal编程技术网

Forms 将Play Framework表单元素映射到自定义类型

Forms 将Play Framework表单元素映射到自定义类型,forms,scala,playframework,mapping,Forms,Scala,Playframework,Mapping,我希望将表单元素映射到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")

我希望将表单元素映射到
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)
  )
映射do
dateField
效果很好,但是是否可以创建自定义映射,例如时间域?我期待着这样的事情

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

您可以使用自定义格式化程序来实现这一点。代码如下所示:

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))
}

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

您可以使用自定义格式化程序来实现这一点。代码如下所示:

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))
}

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

您可以使用自定义格式化程序来实现这一点。代码如下所示:

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))
}

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

您可以使用自定义格式化程序来实现这一点。代码如下所示:

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))
}
注意:我还没有测试过这个,你可能需要做一些调整,但应该很接近