連載
» 2013年05月21日 18時00分 公開

Scala+Play 2.0でWebアプリ開発入門(6):Play 2.xのScala Templatesでビュー&フォーム操作 (3/3)

[中村修太,クラスメソッド]
前のページへ 1|2|3       

入力チェックを追加してみる

 フォーム入力はできるようになりましたが、入力チェック(制約)も実装したいところです。フォームに制約を組み込む場合、mapping関数でバインドの際に実行されるバリデート処理を指定できます。UserControllerのフォーム定義を次のように修正しましょう。

  val userForm = Form(
    mapping(
      "name" -> nonEmptyText,
      "email" -> email)(User.apply)(User.unapply))

 nameフィールドは必須入力、emailフィールドはメールアドレス形式と定義しています。これ以外にも多数のバリデート処理がありますので、APIドキュメントで確認してみてください。

 さて、フォーム定義を修正したら、サブミット時の関数も修正します。先ほどはbindFromRequest.getでフォーム入力値をそのまま取得していましたが、今回はfold関数を使用しています。この関数は2つの引数を取り、1つ目が入力チェックエラー時の処理、2つ目が入力チェックに問題がなかったときの処理です。

  def entrySubmit = Action { implicit request =>
    userForm.bindFromRequest.fold(
      errors => {
        println("error!")
        BadRequest(views.html.user.entry(errors))
      },
      success => {
        println("entry success!")
        Ok(views.html.user.entrySubmit())
      })
  }

 入力チェックエラーが発生したときは、エラー情報が入ったフォームを渡してBadRequestでレスポンスを返しています。

 コントローラを修正したら、もう一度登録画面を開いて確認してみましょう。不正な入力をすると、入力チェックエラーで元の画面に戻ってきて、その旨が表示されます。

入力チェックでエラー発生時の画面

 この章では、フォームや入力チェックについて基本的な使い方を紹介しました。さらに詳細な内容は、公式ドキュメントのフォームの送信をご確認ください。

次回はPlay 2.xでデータベースを扱う方法

 今回はScala Templatesの使い方から始まり、Formオブジェクトを使用してデータを送信する方法、さらには入力チェックを組み込む方法を紹介しました。

 フォームでは、テンプレートヘルパをカスタマイズして使用することで、いろいろな使い方ができるようになります。

 例えば、「Twitter Bootstrap」に対応する方法も公式サイトに掲載されているので、興味がある方は試してみてください。

 次回は、Play 2.xでデータベースを扱う方法を紹介する予定です。

著者プロフィール

中村修太

中村修太(なかむら しゅうた)

クラスメソッド勤務の新しもの好きプログラマです。昨年、東京から山口県に引っ越し、現在はノマドワーカーとして働いています。好きなJazzを聴きながらプログラミングするのが大好きです。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。