g:actionSubmitの使い方
昨晩ごにょごにょいってた件。
ドキュメントに思い切り書いてあるな。。
Creates a submit button that maps to a specific action, which allows you to have multiple submit buttons in a single form. Javascript event handlers can be added using the same parameter names as in HTML.
特定のアクションに割り当てられるsubmitボタンをつくるものだ、と。こいつのおかげで一つのフォームに複数のサブミットボタンをおけるよ、と。イベントハンドラも使えるよ。
以下のGSPは
<g:form controller="user" action="test" > <g:actionSubmit value="submit" /> </g:form>
こんなHTMLになる。
<form action="/context_root/user/test" method="post" > <input type="submit" name="_action_submit" value="submit" /> </form>
submitすると、submitアクションが呼ばれる。(ブラウザに表示されるURLは/context_root/user/test)
<g:form controller="user" action="test" > <g:actionSubmit value="test" /> </g:form>
だと
<form action="/context_root/user/test" method="post" > <input type="submit" name="_action_test" value="test" /> </form>
submitすると、testアクションが呼ばれる。
<g:form controller="user" action="test" > <g:actionSubmit value="test" /> <g:actionSubmit value="test2" /> </g:form>
だと
<form action="/context_root/user/test" method="post" > <input type="submit" name="_action_test" value="test" /> <input type="submit" name="_action_test2" value="test2" /> </form>
それぞれtestアクション、test2アクションが呼ばれる。
<g:form controller="user" action="test" > <g:actionSubmit value="test" action="test2" /> </g:form>
だと
<form action="/context_root/user/test" method="post" > <input type="submit" name="_action_test2" value="test" /> </form>
になってtest2アクションが呼ばれる。(action属性が優先)
g:formのaction属性でブラウザに表示されるパスは決まるけど、実際に呼ばれるアクションはg:actionSubmitタグで決まる、と。
g:formのaction属性を省略した場合、URLはindexになるようです。
URLが/コントローラー名/アクション名になってればそれが呼ばれると思ってたけど、一概にそういうわけじゃないんですね。
ブラウザに表示されるURLが同じなのに404になったりならなかったりしたので?になりましたが、マニュアル読め、と。