data = new SampleData(params);ビューテンプレート側からは、SampleDataの内容そのままの形でフォームが送信されてくる、という前提で作成しています。このため、インスタンスの作成は、送られたパラメータをまとめているparamsを引数にしてnew SampleDataするだけで行えます。
if (data.save()){作成したインスタンスのsaveを呼び出し、保存をします。その結果がtrueなら、問題なく保存できたということでそのままindexにリダイレクトします。バリデーションのチェックは、このsave呼び出しで既に完了しています。
redirect(action:"index");
}
render(saveの返値がfalseならば、保存に失敗しているため、再度createのビューテンプレートを表示します。これはrenderメソッドで行います。このとき、以下のような形で引数を用意していることがわかるでしょう。
view:'create',
model:['sampledata':data,
'title':"Create Data",
'msg':"入力してください。"]);
}
render( view:テンプレート名 , model:[渡すデータをまとめたマップ] );view:でテンプレート名を指定するのは既にやりました。問題は次のmodel:です。ここに、ビューテンプレート側で利用する各種の値をマップとしてまとめておくのです。ここではtitle、msgといったテキストの他に、作成されたSampleDataインスタンスもsampledataという名前で保管しています。
def arr = [最後に、POSTでない、通常のGETアクセスされた時の処理を用意しておきます。例によって変数arrに渡すデータをマップにまとめ、それを出力しています。今回はsampledataという名前でSampleDataインスタンスも渡すようにしておくのを忘れないでください。
'title':"Create Data",
'msg':"入力してください。",
sampledata:data
];
arr;
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
※SampleDataControllerクラスのcreateメソッド def create = { def data = null; if (request.method=='POST'){ data = new SampleData(params); if (data.save()){ redirect(action:"index"); } else { render( view:'create', model:['sampledata':data, 'title':"Create Data", 'msg':"入力してください。"]); } } def arr = [ 'title':"Create Data", 'msg':"入力してください。", sampledata:data ]; arr; }
<< 前へ | 次へ >> |