Deletions are marked like this. | Additions are marked like this. |
Line 68: | Line 68: |
この状態でIntelliJの「Goto Declaration」機能を使えば、ScalaControllerやHtmlの宣言部分にジャンプすることができる(見たいものを右クリックして表示されるメニューで「Goto」「Declaration」)。 | |
Line 69: | Line 70: |
このような「アクションメソッドの返り値」には、ほかにも次のようなものがある。 [[http://www.playframework.org/modules/scala-0.9.1/controllers#Actionmethodsreturnvalues]]。 |
ステップバイステップ
以下の記述は、Play1.2.2RC2+scala-0.9.1によるもの(2011/6/25時点)
※play-scala-0.9とはコントローラの記述方法が大幅に異なるので注意。
スケルトンの作成と実行
上述の環境でplay new ... -with scalaとしてアプリケーションを作成する。 さらにIntelliJで編集できるように、play idealize ...などとする(このときエラーが発生するがとりあえず無視)。 play runとして実行する。通常通りのデモ画面が表示される。
ちなみに、現時点ではplay run --%prodとするとエラーが発生してしまう。
ルーティングの確認
conf/routesを確認すると、
GET / Application.index
という記述がある。 これは、ルートにアクセスされた場合には、controllersパッケージのApplicationオブジェクトのindexメソッドを呼び出すという意味。 ここで記述する、オブジェクト名はcontrollersパッケージに存在することを前提としている。これはJavaの命名規約に背くものであるが、このアプリ内だけで使うものなので問題ないだろう、と考えたものと思われる。 controllers以外のパッケージのものを使う場合は、パッケージ名を明示する必要がある。
routesの記述はJava版と同じと考えられる。 routes ファイルの構文
コントローラの確認
app/controllers.scalaを見てみると、
package controllers import play._ import play.mvc._ object Application extends Controller { import views.Application._ def index = { html.index("Your Scala application is ready!") } }
などとなっている。この「html.index("Your Scala application is ready!")」という部分は、play-scala専用のテンプレートエンジンによって生成される関数の呼び出しなのだが、これはとりあえず無視する。
とりあえず、テンプレートは使わずに自力でhtmlを作成して返すことを考える。
自力HTMLの返し方
次のように記述を変更する。
object Application extends ScalaController { def index = { Html("<html><body><h1>hello, wold</h1></body></html>") } }
まず、「extends Controller」は「extends ScalaController」に変更する。前者のままだとIntelliJが混乱してしまうようなので。
さらに、indexの本文にはhtmlらしきものを引数としてHtml()というメソッドを呼び出してみる。もちろんScalaでは直接XMLが記述できるので、二重引用符はなくてもよい。
この状態でIntelliJの「Goto Declaration」機能を使えば、ScalaControllerやHtmlの宣言部分にジャンプすることができる(見たいものを右クリックして表示されるメニューで「Goto」「Declaration」)。
このような「アクションメソッドの返り値」には、ほかにも次のようなものがある。
http://www.playframework.org/modules/scala-0.9.1/controllers#Actionmethodsreturnvalues。