コントローラーとビューの基本 (4/5)
作成:2013-10-12 11:07
更新:2013-10-12 11:07
更新:2013-10-12 11:07
■フォームを送信する
続いて、ビュー側からコントローラーへと値を渡す方法について説明しましょう。
ビューからコントローラーへ値を渡す際の基本となるのは「フォーム」です。フォームから送信された情報は、コントローラー側では「params」という名前の連想配列として利用できるようになっています。例えば、name="str"という入力フィールドがあったなら、params['str']として値が取り出せるわけです。
下のリスト欄に簡単なサンプルを挙げておきました。アクセスすると送信フォームが表示されるので、名前を書いて送信すると、簡単なメッセージが表示されます。
こうした場合は、「request」オブジェクトの「method」を調べると良いでしょう。
ビューからコントローラーへ値を渡す際の基本となるのは「フォーム」です。フォームから送信された情報は、コントローラー側では「params」という名前の連想配列として利用できるようになっています。例えば、name="str"という入力フィールドがあったなら、params['str']として値が取り出せるわけです。
下のリスト欄に簡単なサンプルを挙げておきました。アクセスすると送信フォームが表示されるので、名前を書いて送信すると、簡単なメッセージが表示されます。
■パラメータによる送信
このparamsによる値の取得を利用する際には、注意すべき点が1つあります。それはフォームからの送信にかぎらず、クエリー文字列を利用した送信も全く同じように値が得られる、という点です。例えば、下のサンプルで、http://localhost:8080/GralisApp/helo/index?input=helloこのようにアクセスすると、画面に「こんにちは、helloさん!」と表示され、入力フィールドには最後に送信した値として「hello」と表示されます。つまり、フォームの送信を簡単に偽装できるのです。
こうした場合は、「request」オブジェクトの「method」を調べると良いでしょう。
if (request.method == 'POST'){……処理……}このようにrequest.methodの値をチェックすることで、POSTの場合のみの処理を追加することができます。(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※HeloController
package gralisapp
class HeloController {
def index() {
def arr = [
'title':"Sample Page",
'msg':"お名前は?",
'value':''
];
if (params['input'] != null){
arr['value'] = params['input'];
arr['msg'] = 'こんにちは、' + params['input'] + 'さん!'
}
arr;
}
}
※index.gsp
<!DOCTYPE html>
<html>
<head>
<title>Grails Helo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body {color: #006600;}
h1 {background: #99ff99;font-size: 14pt;padding: 5px;}
h2 {font-size: 12pt; font-weight: bold;}
p {font-size: 10pt;}
</style>
</head>
<body>
<h1>${title}</h1>
<h2>${msg}</h2>
<form method="post" action="index">
<input type="text" name="input" value="${value}">
<input type="submit">
</form>
</body>
</html>
※関連コンテンツ