data = new SampleData(params);ビューテンプレート側からは、SampleDataの内容そのままの形でフォームが送信されてくる、という前提で作成しています。このため、インスタンスの作成は、送られたパラメータをまとめているparamsを引数にしてnew SampleDataするだけで行えます。
if (data.save()){
redirect(action:"index");
} 作成したインスタンスのsaveを呼び出し、保存をします。その結果がtrueなら、問題なく保存できたということでそのままindexにリダイレクトします。バリデーションのチェックは、このsave呼び出しで既に完了しています。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;
}
| << 前へ | 次へ >> |