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になったりならなかったりしたので?になりましたが、マニュアル読め、と。