<g:radioGroup name="radio"サンプルでは、このようにタグが記述されています。valuesとlabelsには、それぞれMapリテラルが書かれています。そしてタグ内には、${it.radio} ${it.label}というように、itのradioとlabelを出力する式言語が書かれています。このタグ内の部分が、ラジオボタンの数だけ繰り返し出力されます。
values="['A','B','C']"
labels="['One','Two','Three']">
<div>${it.radio} ${it.label}</div>
</g:radioGroup>
<g:select name="sel"「なんだ、Mapリテラルで用意すればいいだけか」と思った人。from="['Mac','Windows',……]"とはなっていないので注意してください。Mapリテラルを式言語の中に記述してあるでしょう? すなわち、このfromはリテラルではなく「オブジェクトを指定する」のが基本なのです。
from="${['Mac','Windows','Linux','ChromeOS',
'iOS','android']}"
multiple="true" />
def sels = params.sel;ここではparamsからselの値を変数に取り出し、これをforで繰り返し処理しています。こんな具合にすれば、multiple="true"による複数項目の選択も問題なく処理できます。
for(def item : sels){
arr.msg += item + " ";
}
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
※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>
<g:form controller="helo">
<g:radioGroup name="radio" values="['A','B','C']" labels="['One','Two','Three']">
<div>${it.radio} ${it.label}</div>
</g:radioGroup>
<g:select name="sel" from="${['Mac','Windows','Linux','ChromeOS','iOS','android']}" multiple="true" />
<g:actionSubmit value="送信" action="form" />
</g:form>
</body>
</html>
※HelloController.groovy
package gralisapp
import java.net.Authenticator.RequestorType;
class HeloController {
def index() {
def arr = [
'title':"Sample Page",
'msg':"送信して。",
'value':''
];
arr;
}
def form() {
def arr = [
'title':"Sample Page",
'msg':"送信して。",
'value':''
];
if (request.method=='POST'){
arr.msg = params.radio + " [";
def sels = params.sel;
for(def item : sels){
arr.msg += item + " ";
}
arr.msg += "]";
}
render(view:'index', model:arr)
}
}
| << 前へ | 次へ >> |