#コントローラから値を受け取る方法
下の写真でいうところの、controllersフォルダのクラス→viewフォルダのクラスに値を渡す方法。
##viewフォルダ側の処理
・こんな風に引数を受け取れる変数を用意する。
・複数ある場合は、複数用意する。
・型は必ずラッパークラス型に設定する。
@(one: String ,two :String, three:String)
##controllersの記載方法
こんな風に受け渡したい値をindex.render
の中に記述する。
public static Result index() {
return ok(index.render(
"サンプル1",
"サンプル2",
"サンプル3"
)
}
#フォームヘルパーを使って、フォームを作成する方法
##index.scala.htmlの記載方法
@main("サンプル") {
<h1>Hello!</h1>
<p>@one</p>
<p>@two</p>
<p>@three</p>
<p>これはサンプル</p>
@helper.form(action=routes.Application.send){<!--①-->
@(helper.inputText(<!--②-->
field = form1("message")
))
<input type="submit"><!--③-->
}
}
action属性:フォームの送信ボタンを押して送信されるデータの送信先を指定する。
(参考)https://qiita.com/mikuhonda/items/f3126380d3340f3d8a2b
input要素:type属性にどのような値を指定するかによって、 一行テキストボックス・チェックボックス・ラジオボタン・送信ボタン・リセットボタン等、 フォーム部品の種類を指定し分けることができます
(参考)http://www.htmq.com/html5/input.shtml
①helperにあるformオブジェクトを呼び出し。actionは通常、送信先のアドレスを指定するがここでは、送信するメソッドを決める。
②テキストボックスを作成し、値をmessageに格納する。
③送信ボタンを作成する
##controllersの記載方法
こんな風に書き換える
package controllers;
import play.*;
import play data.*;//フォームヘルパーを利用するためのPKG
import static plya.data.Form.*;//フォームヘルパーを利用するためのPKG
import play.mvc.*;
import views.html.*;
public class Application extends Controller {
//Form用の内部クラス
public static class SampleForm{//内部クラス、送信されたフォームの値を管理するためのクラス
public String message;//import type="text"タグの値を保管するための変数
//ルートにアクセスした際のAction
public static Result index(){
return ok(index.render("何か書いて。",new Form(SampleForm.class)));
//引数にSampleFormクラスを指定して、Formインスタンスを生成する
}
//sendにアクセスした際のAction
public static Result send(){
Form<SampleForm> f = form(SampleForm.class).bindFormRequest();
if(!f.hasErrors()){
}
SampleForm date = f.get();
String msg = "you typed:" + date.message;
return ok(index.render(msg,f));
}else {
return badRequest(index.render)("ERROR",form(SampleForm.class)));
}
}
}
###sendメソッドの処理
public static Result send(){
Form<SampleForm> f = form(SampleForm.class).bindFormRequest();//①
if(!f.hasErrors()){//②
SampleForm date = f.get();//③
String msg = "you typed:" + date.message;//④
return ok(index.render(msg,f));
}else {//エラーが発生した事をクライアントに伝える
return badRequest(index.render)("ERROR",form(SampleForm.class)));
}
}
バインドとは:割り当てられるとかのイメージ
(参考)http://wa3.i-3-i.info/word12448.html
①SampleFormはジェネリクスで型を限定している。bindFormRequest()で、クライアントから送信されたフォームの値を、バインドしたFormインスタンスで返す。
送信ボタンを押したら→ルートファイルのsendに行って→Apricationのsendが呼び出される。
②最初にエラーチェックが入る
③Formのgetを呼び出すと、フォーム情報を管理するクラス(SampleFormクラス)のインスタンスが取得出来る。
④
##ルートの記載方法
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# Home page
GET / controllers.Application.index()
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.at(path="/public", file)
POST /send controllers.Application.send()
POSTとGETの違いについて
→POSTはサーバに情報を登録する際に使用する。GETはサーバから情報を取得して来る際に使用する。
(参考)https://qiita.com/Sekky0905/items/dff3d0da059d6f5bfabf