0

我想调用控制器函数“getXXX(MyClass[] empnos)”,它将数组作为 playframework 2.1 中的输入。

为此,我将路线输入为:

GET     /getXXX       controllers.Application.getXXX(empnos:Array[MyClass])

它给出了编译错误:

找不到类型 Array[MyClass] 的 URL 路径绑定器。尝试为此类型实现隐式 PathBindable。

请帮我解决这个问题。我不知道实现隐式 PathBindable。

提前致谢。

4

1 回答 1

3

将包添加到您的项目 Build.scala:

routesImport ++= "binders.CustomBinders._"

使用查询字符串的示例:

package binders;

import org.joda.time.DateTime
import java.util.Date
import java.text.SimpleDateFormat
import play.api.mvc.QueryStringBindable
import java.net.URLEncoder
import org.joda.time.format.DateTimeFormat
import org.joda.time.DateTimeZone


object CustomBinders {

  implicit def queryStringBinder(implicit strBinder: QueryStringBindable[String]) = new QueryStringBindable[DateTime] {
      override def bind(key: String, params: Map[String, Seq[String]]): Option[Either[String,DateTime]] = {
        for {
          dateStr <- strBinder.bind(key, params)
        } yield {
            dateStr match {
              case (Right(dateStr)) => {
                val formatter = new SimpleDateFormat(
                        "EEE, d MMM yyyy HH:mm:ss z");
                try {
                    val someDate = formatter.parse(dateStr);
                    Right(new DateTime(someDate.getTime(),DateTimeZone.UTC))
                } catch {
                    case e: NumberFormatException => Left("Cannot parse parameter " + key + " as DateTime: " + e.getMessage)
                }
              }
              case _ => Left("Unable to bind DateTime")
            }  
         } 
      }

      override def unbind(key: String, value: DateTime) = {
        val fmt = DateTimeFormat
                .forPattern("EEE, d MMM yyyy HH:mm:ss z");
        strBinder.unbind(key, fmt.print(value))
      }

  }
}
于 2013-02-27T23:57:16.977 回答