NotePRGパターンを利用しているため、ブラウザをリロードしても、新規作成処理は実行されず、新規作成完了が再度表示されるだけである。実行するハンドラメソッドを切り替える。ここではサンプルアプリケーションの入力内容確認画面のCreateボタンとBackボタンを例に説明する。フォームには、新規作成を行うCreateボタンと新規作成フォーム画面を再表示するBackボタンが存在する。form内に以下のコードが必要となる。)のBackボタンにname="redo"というパラメータを指定する。Controllerの全ソースを示す。Entity一覧取得、Entity参照、Entity更新、Entity削除も同じ要領で実装することになるが、説明は割愛する。基本的には次に挙げるものは原則として使用しないこと。プロジェクトの規模が大きくなると保守性を著しく低下させる可能性がある。使用することで実現できる。以下に、引数の使用方法について、目的別に13例示す。Modelオブジェクトに渡したいデータ(オブジェクト)を追加する。説明(1)Modelオブジェクトを引数として受け取る。(2)引数で受け取ったModelオブジェクトのaddAttributeメソッドを呼び出し、渡したいデータをModelオブジェクトに追加する。いう文字列のデータを追加している。(3)addAttributeメソッドの第一引数を省略すると値のクラス名の先頭を小文字にした文字列が属性名になる。行ったのと同じ結果となる。(4)View(JSP)側では、「${属性名}」と記述することでModelオブジェクトに追加したデータを取得することができる。例ではHTMLエスケープを行うEL式の関数を呼び出しているため、「${f:h(属性名)}」としている。(5)「${属性名.JavaBeanのプロパティ名}」と記述することでModelに格納されているJavaBeanから値を取得することができる。(6)JSP実行後に出力されるHTML。NoteModelは使用しない場合でも引数に指定しておいてもよい。後で使う場合がある(後々メソッドのシグニチャを変更する必要がなくなる)。MVCの管理下にないモジュール(例えばServletFilterなど)からも値を参照することが出来る。URLのパスから値を取得する¶URLのパスから値を取得する場合は、引数に@PathVariableアノテーションを付与する。@RequestMappingアノテーションのvalue属性に取得したい部分を変数化しておく必要がある。説明(1)@RequestMappingアノテーションのvalue属性に、抜き出したい箇所をパス変数として指定する。パス変数は、「{変数名}」の形式で指定する。いう二つのパス変数を指定している。(2)@PathVariableアノテーションのvalue属性には、パス変数の変数名を指定する。(3)@PathVariableアノテーションのvalue属性は省略可能で、省略した場合は引数名がリクエストパラメータ名となる。この方法は、-gオプション(デバッグ情報を出力するモード)Java8から追加された-parametersオプション(メソッド・パラメータにリフレクション用のメタデータを生成するモード)のどちらかを指定してコンパイルする必要がある。Noteバインドする引数の型はString以外でも良い。Request)が応答される。Integerに変換できないため、例外がスローされる。Warning@PathVariableアノテーションのvalue属性を省略する場合、デプロイするアプリケーションは-gオプション又はJava8から追加された-parametersオプションを指定してコンパイルする必要がある。これらのオプションを指定した場合、コンパイル後のクラスにはデバッグ時に必要となる情報や処理などが挿入されるため、メモリや処理性能に影響を与えることがあるので注意が必要である。基本的には、value属性を明示的に指定する方法を推奨する。リクエストパラメータを個別に取得する¶リクエストパラメータを1つずつ取得したい場合は、引数に@RequestParamアノテーションを付与する。説明(1)@RequestParamアノテーションのvalue属性には、リクエストパラメータ名を指定する。(2)@RequestParamアノテーションのvalue属性は省略可能で、省略した場合は引数名がリクエストパラメータ名となる。この方法は、-gオプション(デバッグ情報を出力するモード)Java8から追加された-parametersオプション(メソッド・パラメータにリフレクション用のメタデータを生成するモード)のどちらかを指定してコンパイルする必要がある。(3)デフォルトの動作では、指定したリクエストパラメータが存在しないとエラーとなる。いうリクエストパラメータがない状態でアクセスした場合、引数ageにnullが渡る。(4)指定したリクエストパラメータが存在しない場合にデフォルト値を使用したい場合は、defaultValue属性にデフォルト値を指定する。Request)が応答される。defaultValue属性を指定している場合は例外はスローされず、defaultValue属性で指定した値が渡る。Noteバインドする引数の型はString以外でも良い。Request)が応答される。Integerに変換できないため、例外がスローされる。以下の条件に当てはまる場合は、次に説明するフォームオブジェクトにバインドすること。form内の項目である。form内の項目ではないが、リクエストパラメータに必須チェック以外の入力チェックを行う必要がある。リクエストパラメータの入力チェックエラーのエラー詳細をパラメータ毎に出力する必要がある。3つ以上のリクエストパラメータをバインドする。リクエストパラメータをまとめて取得する¶リクエストパラメータをオブジェクトにまとめて取得する場合は、フォームオブジェクトを使用する。formを表現するJavaBeanである。個別にリクエストパラメータを受け取っていたハンドラメソッドを、フォームオブジェクトで受け取るように変更した場合の実装例である。使って個別にリクエストパラメータを受け取っているハンドラメソッドは以下の通り。name}フォームオブジェクトクラスを作成する。getters}Noteリクエストパラメータ名とフォームオブジェクトのプロパティ名は一致させる必要がある。名前が一致するプロパティがないため、フォームオブジェクトに取り込まれない。使って個別に受け取っていたリクエストパラメータをフォームオブジェクトとして受け取るようにする。説明(1)SampleFormオブジェクトを引数として受け取る。必須チェックは行われない。実際には、WEBの画面上にしか存在しないパラメータ(確認用パスワードや、規約確認チェックボックス等)が存在する。Domainオブジェクトにそのような画面項目に依存する項目を入れるべきではないので、Domainオブジェクトとは別にフォームオブジェクト用のクラスを作成することを推奨する。リクエストパラメータからDomainオブジェクトを作成する場合は、一旦フォームオブジェクトにバインドしてからプロパティ値をDomainオブジェクトにコピーすること。