今回は、Play Framework 2.0.4 で、ビューで送信したフォームの中身を
コントローラー側で生のまま確認したいなーということで、その方法を探ってみました。
Play! には、便利なフォームテンプレートやヘルパーの機能がいろいろあるらしいですけど、
まずはベーシックに使ってみましょうということで、私自身は今のところ使用してません。
今利用しているのは単純な Form で Submit された内容を
コントローラーで Form クラスに bindFromRequest で格納する方法です。
こんな感じ。
[ ビュー : Form(Values) ] → [ コントローラー : Form(Values) → UserForm(Values) ]
UserForm クラスは受け取ったフォームの値を格納するクラスです。
あらかじめ、こんな風に作ってあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package forms; import play.data.validation.Constraints.Required; public class UserForm { @Required public String year; /* 年度 */ @Required public String month; /* 月度 */ public String bikou; /* 備考 */ public String toString() { return "UserForm [" + ", year=" + year + ", month=" + month + ", bikou=" + bikou + "]"; } } } |
ビューで送信したフォームの内容は、コントローラー上でこんな風に書けば簡単に取得できます。
1 2 3 |
// フォームの値をRequestからバインド play.data.Form<forms.UserForm> formData = play.mvc.Controller.form(forms.UserForm.class).bindFromRequest(); |
@Required アノテーションのおかげで、year や month に値が入っていないと
エラーとしてはじいてくれます。
さて、この手順で作ってった場合、
ビューで送信したフォームの内容を生のままで確認したいときなどは、ちょっと困ってしまいます。
bindFromRequest メソッドで form に値を格納した段階で、中で処理されちゃっているからです。
本当に form の値がコントローラーに渡っているのかどうか疑わしいときなどです。
そんな時は、デバッグ中にでもこの値をチェックしましょう
1 2 |
// HttpContextを取得 play.mvc.Http.Context.current() |
currentに入っているのは現在のHttp通信のContextの中身そのもの。
HttpRequestの中身、つまりリクエストの内容がほしい場合は、
1 2 |
// HttpRequestを取得 play.mvc.Http.Context.current().request() |
に入ってます。
HttpRequestのヘッダなども取得できるので、送信元IPなんかも取れちゃいますねー。
いろんな処理に応用できそうです。