<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) } }
<< 前へ | 次へ >> |