「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ガイド、実際のアプリをステップごとに」を参照してください

Source: https://habr.com/ru/post/J111464/


All Articles