やりたいこと
PlayFramework 1.2.7を使ったアプリケーションで、validationエラー発生時にフォームに入力値を再表示する
環境
- java version:1.7.0_45
- PlayFramework:1.2.7
方法1:入力画面のアクションにリダイレクトする
公式ドキュメント(テンプレートへのエラーの表示)に記載されている方法です。
リダイレクトの間にエラーを保持する特別なトリックが必要になります。
validation.keep() メソッドを使用してください。
このメソッドは、次のアクションのためにエラーコレクションを保持します。
if(validation.hasErrors()) {
//リダイレクトの間エラーを保持する
validation.keep();
//入力パラメータをflashに詰める
params.flash();
//入力画面のアクション(index)にリダイレクトする
index();
}
※最初はこの方法を試しましたが、フォームへの入力値が一定量を超えた段階でブラウザが動かなくなってしまったため断念し、
方法2に切り替えました。
方法2:入力画面のテンプレート名を指定してレンダリングする
入力パラメータはテンプレートスコープの変数として受け渡します。
他のアクションにリダイレクトするわけではないため、エラー内容を保持するトリックは必要ありません。
if(validation.hasErrors()) {
render("@index", param1, param2, param3);
}
参考
Beginner: Preferred way to handle Validation, Flash-scoped vars and form re-rendering - Google グループ
https://groups.google.com/forum/#!topic/play-framework/eOAh7fjoJV0mvc - play framework: how to repopulate form on validation-failure when using datamodel? - Stack Overflow
http://stackoverflow.com/questions/6782016/play-framework-how-to-repopulate-form-on-validation-failure-when-using-datamode