LoginSignup
8
9

More than 5 years have passed since last update.

[Grails]GSPでHTMLフォームを出力する方法まとめ

Posted at

テキストフィールド

GSP
<g:textField name="mytext" value="default text" size="10" maxlength="5"/>
  • 出力されるHTML
html
<input type="text" name="mytext" value="default text" size="10" maxlength="5" id="mytext" />

テキストエリア

GSP
<g:textArea name="ta">aiueo</g:textArea>
  • 出力されるHTML
html
<textarea name="ta" id="ta" >aiueo</textarea>

ラジオボタン

GSP
<g:radio name="group1" value="1" />
<g:radio name="group1" value="2" checked="true"/>
  • 出力されるHTML
html
<input type="radio" name="group1" value="1" id="group1"  />
<input type="radio" name="group1" checked="checked" value="2" id="group1"  />

チェックボックス

GSP
<g:checkBox name="checkbox1" value="AAA" checked="false"/>
<g:checkBox name="checkbox1" value="BBB" checked="true" />
  • 出力されるHTML
html
<input type="hidden" name="_checkbox1" /><input type="checkbox" name="checkbox1" value="AAA" id="checkbox1"  />
<input type="hidden" name="_checkbox1" /><input type="checkbox" name="checkbox1" checked="checked" value="BBB" id="checkbox1"  />

コントローラ内で値を取得する方法

他のフォームコントロールと違って、チェックボックスの場合は同名の値が渡ってくるので、取得がちょっと他と違う。
単純にparams.checkbox1としても値は取れるけど、そうすると以下のように型が変化する。

1.一つも選択されていなければnull
2.一つだけ選択されていればString
3.二つ以上選択されていればList

これでも別に処理は出来るけど、params.list('checkbox1')を使うと、どのような状態でもListに出来るのでもっとスマート。

Controller
class TestController {
  def test(){
    def checked = params.list("checkbox1")
    msg = checked ? checked.join(",") : "not check"
    render msg
  }
}

セレクトボックス

GSP
<%
// テスト用Mapデータ
def test = [
   [mapId:1, mapValue:"value1" ],
   [mapId:2, mapValue:"value2" ],
   [mapId:99, mapValue:"value99" ]
]
%>
<g:select name="selectedMapId" from="${test}" optionKey="mapId" optionValue="mapValue" />
  • 出力されるHTML
html
<select name="selectedMapId" id="selectedMapId" >
<option value="1" >value1</option>
<option value="2" >value2</option>
<option value="99" >value99</option>
</select>

デフォルトで選択される項目の指定

optonValueで表示される値の内、デフォルトで選択したい(selectedを付与したい)値を、value属性に指定する。

GSP
<g:select name="selectedMapId" from="${test}" optionKey="mapId" optionValue="mapValue" value="99"/>
  • 出力されるHTML
html
<select name="selectedMapId" id="selectedMapId" >
<option value="1" >value1</option>
<option value="2" >value2</option>
<option value="99" selected="selected" >value99</option>
</select>

リスト形式で表示したい場合はsize属性を追加する。

GSP
<g:select name="selectedMapId" from="${test}" optionKey="mapId" optionValue="mapValue" size="2"/>
  • 出力されるHTML
html
<select name="selectedMapId" size="2" id="selectedMapId" >
<option value="1" >value1</option>
<option value="2" >value2</option>
<option value="99" >value99</option>
</select>

複数選択を可能にしたい場合はmultiple属性を追加する

GSP
<g:select name="selectedMapId" from="${test}" optionKey="mapId" optionValue="mapValue" multiple="true"/>
  • 出力されるHTML
html
<select name="selectedMapId" multiple="true" id="selectedMapId" >
<option value="1" >value1</option>
<option value="2" >value2</option>
<option value="99" >value99</option>
</select>

初期メッセージを追加したい場合

GSP
<g:select name="selectedMapId" from="${test}" optionKey="mapId" optionValue="mapValue"
    noSelection="['null': 'please select!']"
/>
  • 出力されるHTML
html
<select name="selectedMapId" id="selectedMapId" >
<option value="null">please select!</option>
<option value="1" >value1</option>
<option value="2" >value2</option>
<option value="99" >value99</option>
</select>

おまけ(ループ)

GSP
<%def source = ["A", "B", "C"]%>
<g:each in="${source}" var="moji" status="index">
    ${moji}(${index})<br />
</g:each>
  • 出力されるHTML
html
    A(0)<br />

    B(1)<br />

    C(2)<br />

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9