0

プレイフレームワーク2.1の入力として配列をとるコントローラー関数「getXXX(MyClass [] empnos)」を呼び出したい。

そのために私は次のように敗走にエントリーしました:

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 に答える