「Hello World」チュートリアル-最初のPlayフレームワークアプリケーション(パート2)

これは非常に表面的なガイドであり、「Hello World」アプリケーションの作成例を使用してPlayフレームワークの基本機能のみを紹介します。



(パート1)



フォーム作成



名前を入力できるフォームを作成して、「Hello World」アプリケーションを開始しましょう。



helloworld / app / views / Application / index.htmlを次のように編集します。



#{extends 'main.html' /} #{set title:'Home' /} <form action="@{Application.sayHello()}" method="GET"> <input type="text" name="myName" /> <input type="submit" value="Say hello!" /> </form>
      
      







@ {...}表記を使用して、PlayがApplication.sayHelloでURLを自動的に生成するようにします。 次に、ブラウザのホームページを更新します。







申し訳ありませんが、エラーが発生します。 これは、存在しないApplication.sayHelloアクションを参照しているためです。 helloworld / app / controllers / Application.javaで作成しましょう:



 package controllers; import play.mvc.*; public class Application extends Controller { public static void index() { render(); } public static void sayHello(String myName) { render(myName); } }
      
      







sayHelloメソッドでmyNameパラメーターを宣言したため、パラメーター値myNameが自動的に入力され、HTTP経由で受信されます。 また、render()関数を呼び出してmyNameに渡されたテンプレートを表示するため、デザインテンプレートで使用できます。







ここで、名前を入力してフォームを送信しようとすると、別のエラーが発生します。







このエラーの原因を理解することは非常に簡単です。 Playはこのアクションのデフォルトテンプレートを呼び出そうとしますが、存在しません。 helloworld / app / views / Application / sayHello.htmlを作成しましょう:



 #{extends 'main.html' /} #{set title:'Home' /} <h1>Hello ${myName ?: 'guest'}!</h1> <a href="@{Application.index()}">Back to form</a>
      
      







今すぐページを更新してください。







Groovy ?:演算子の使用方法をご覧ください。 myName変数が設定されていない場合、デフォルト値に切り替わります。 したがって、名前を入力せずにフォームを送信しようとすると、「Hello guest」と表示されます。



CNC設定



作成されたページのURLを見ると、次のようなものが表示されます。



http:// localhost:9000 / application / sayhello?myName = guillaume



これは、Playがすべてのコントローラーアクションにデフォルトルートを使用するためです。



* /{controller}/{action} {controller}.{action}







カスタムApplication.sayHelloアクションのパスを指定することにより、最適なURLを設定できます。 helloworld / conf / routesを変更して、最初の行の後に次を追加します。



GET /hello Application.sayHello







ここでフォームに戻り、名前をもう一度入力して、すべてが機能することを確認します。



出力テンプレートのカスタマイズ



テンプレートはmain.htmlテンプレートを継承するため、すべてのテンプレートを簡単に変更できます。 helloworld / app / views / main.htmlを変更します。



 ... <body> The Hello world app. <hr/> #{doLayout /} </body> ...
      
      







「The Hello world app」という行がすべてのページに表示されました。







入力検証



フォームにチェックを追加します。 フォームを送信する前に記入する必要があります。 これを行うには、Play検証フレームワークを使用できます。

sayHelloをhelloworld / app / controllers / Application.javaコントローラーに次のように変更します。



 ... public static void sayHello(@Required String myName) { if(validation.hasErrors()) { flash.error("Oops, please enter your name!"); index(); } render(myName); } ...
      
      







play.data.validationをインポートすることを忘れないでください* @Requiredアノテーションを使用するため。 Playは、myNameフィールドが入力されているかどうかを自動的に確認するか、エラーを含むオブジェクトを追加します。 次に、エラーが発生した場合、メッセージを追加し、サイトのルートにリダイレクトします。



Flashオブジェクトを使用すると、ページにリダイレクトするときにメッセージを保存できます。



ここで、エラーメッセージがあれば表示するだけです。 helloworld / app / views / Application / index.htmlを変更します。



 #{extends 'main.html' /} #{set title:'Home' /} #{if flash.error} <p style="color:#c00"> ${flash.error} </p> #{/if} <form action="@{Application.sayHello()}" method="GET"> <input type="text" name="myName" /> <input type="submit" value="Say hello!" /> </form>
      
      







仕組みを確認しましょう。







自動テスト



アプリケーションのテストを作成して、チュートリアルを終了します。 Javaコードには検証するロジックがないため、Webアプリケーションを検証する必要があります。 したがって、Seleniumのテストを作成します。



最初に、テストモードでアプリケーションを実行します。 次のコマンドを使用して、アプリケーションを停止して再起動します。



$ play test







play testコマンドはplay runとほとんど同じですが、テストランナーモジュールが追加でロードされるため、ブラウザからテストスイートを直接実行できます。



ブラウザhttpで次のアドレスを開きます。// localhost:9000 / @ testsテストを表示します。 すべてのデフォルトのテストを選択して実行してみてください。すべてが緑色になっているはずです...しかし、これらは標準的なテストであり、一般に何もテストしません。







Seleniumのテストは通常​​、HTMLファイルとして記述されます。 Seleniumのテストの作成は少し面倒です(HTMLテーブル要素を使用した書式設定)。 幸いなことに、Playは、Seleniumスクリプトの簡略化された構文をサポートするPlayテンプレートエンジンを使用して生成するのに役立ちます。



アプリケーションの作成時に、PlayはSeleniumのテストを含むテストを自動的に作成しました。 helloworld / test / Application.test.htmlを開きます。

 *{ You can use plain selenium command using the selenium tag }* #{selenium} // Open the home page, and check that no error occurred open('/') assertNotTitle('Application error') #{/selenium}
      
      







このテストは問題なく動作するはずです。 彼は単にメインページを開き、ページに「アプリケーションエラー」というテキストが含まれていないことを確認します。



アプリケーションのテストを作成します。 テストの内容を変更します。



 #{selenium} //     ,       open('/') assertNotTitle('Application error') //     assertTextPresent('The Hello world app.') //   clickAndWait('css=input[type=submit]') //     assertTextPresent('Oops, please enter your name!') //      type('css=input[type=text]', 'bob') clickAndWait('css=input[type=submit]') //   assertTextPresent('Hello bob!') assertTextPresent('The Hello world app.') //    clickAndWait('link=Back to form') //  ? assertTextNotPresent('Hello bob!') #{/selenium}
      
      







アプリケーションを完全にテストしました。 テストランナーでこのテストを選択し、[開始]をクリックします。 すべてが緑色になっているはずです!







もっと知りたいですか?



とても簡単なレッスンでした。 Playフレームワークについて詳しく知りたい場合は、 「チュートリアル-Playガイド、実際のアプリをステップごとに」を参照してください



All Articles