読者です 読者をやめる 読者になる 読者になる

valid,invalid

関心を持てる事柄について

controllers 内でサブパッケージを作成する場合の注意点

Play Framework 始めた。

controllers 内にサブパッケージを作成して、その中のクラスおよびメソッドへのルーティングで一度失敗したのでメモ。

controller 直下のクラスにアクセスする

まず基本のおさらい。

パッケージ名:controllers
クラス名:MyClass
メソッド名:index

↑ココにアクセスしたい場合は以下のように routes とテンプレートファイルを編集する。

POST /index  controllers.MyClass.index()
@form(action = routes.MyClass.index) {
   
}

 

controller 下のサブパッケージのクラスにアクセスする

本題はこのクラスのサブパッケージ内に作成する場合。

パッケージ名:controllers.sub
クラス名:MyClass
メソッド名:index
まず routes を修正する。
POST /index  controllers.sub.MyClass.index()
その後に scala.html 内のPOST先 action を修正。
サブパッケージ名をクラス名に付けてみる。
@form(action = routes.sub.MyClass.index) {
   
}
これでアクセスしてみると…
value sub is not a member of object controllers.routes
「"sub"なんてオブジェクトないよ」とのエラーメッセージ。
調べてみたところ完全修飾名で書けばOKとのこと。
There is a routes subpackage for each controller package. So the rightfully qualified name of your route is:@controllers.foo.routes.Home.index()
It's done this way to "see" the routes subpackage relatively from any
controllet package as "routes" 
[2.0] [Scala] routes for controller sub-packages - Google Groups -  
下記の通り修正したら無事通るようになった。
@form(action = controllers.sub.routes.MyClass.index) {
   
}