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

# テキストフィールド

```groovy:GSP
<g:textField name="mytext" value="default text" size="10" maxlength="5"/>
```

+ 出力されるHTML

```html:html
<input type="text" name="mytext" value="default text" size="10" maxlength="5" id="mytext" />

```

# テキストエリア

```groovy:GSP
<g:textArea name="ta">aiueo</g:textArea>
```

+ 出力されるHTML

```html:html
<textarea name="ta" id="ta" >aiueo</textarea>
```

# ラジオボタン

```groovy:GSP
<g:radio name="group1" value="1" />
<g:radio name="group1" value="2" checked="true"/>
```

+ 出力されるHTML

```html:html
<input type="radio" name="group1" value="1" id="group1"  />
<input type="radio" name="group1" checked="checked" value="2" id="group1"  />

```


# チェックボックス

```groovy:GSP
<g:checkBox name="checkbox1" value="AAA" checked="false"/>
<g:checkBox name="checkbox1" value="BBB" checked="true" />
```

+ 出力されるHTML

```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に出来るのでもっとスマート。

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

# セレクトボックス

```groovy: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: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`属性に指定する。

```groovy:GSP
<g:select name="selectedMapId" from="${test}" optionKey="mapId" optionValue="mapValue" value="99"/>
```

+ 出力されるHTML

```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`属性を追加する。

```groovy:GSP
<g:select name="selectedMapId" from="${test}" optionKey="mapId" optionValue="mapValue" size="2"/>
```
+ 出力されるHTML

```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`属性を追加する

```groovy:GSP
<g:select name="selectedMapId" from="${test}" optionKey="mapId" optionValue="mapValue" multiple="true"/>
```
+ 出力されるHTML

```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>
```

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

```groovy:GSP
<g:select name="selectedMapId" from="${test}" optionKey="mapId" optionValue="mapValue"
    noSelection="['null': 'please select!']"
/>
```

+ 出力されるHTML

```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>

```



# おまけ（ループ）

```groovy:GSP
<%def source = ["A", "B", "C"]%>
<g:each in="${source}" var="moji" status="index">
    ${moji}(${index})<br />
</g:each>
```

+ 出力されるHTML

```html:html
    A(0)<br />

    B(1)<br />

    C(2)<br />

```