Tomáš
Tomáš

Reputation: 2108

How to direct to submit button to another action

how can I jump to another action in controller?

I have form and several submit buttons. Every submmit button has name.

<g:form action="save" method="post">
   <g:input name="title" value="${letter.title}" />
   <g:input name="comments[0].text" value="${letter.comments[0].text}" />
   <g:submitButton name="save" value="save" />
   <g:submitButton name="addComment" value="add" />   
</g:form>

def save = {

     if (params.addComment){
       letter.addToComents(  new Comment() ) 
       render(view:'form', model:["letter": letter])
       return
     }

    ...
    if ( letter.save() ) 
    ...
}

def addComment = {
      ...
    }

It works, but it is not good. I want move code from block "addComment" to action addComment:

def save = {

     if (params.addComment){
       // it don´t work
       redirect ( action:"addComment" )
     }

    ...
    if ( letter.save() ) 
    ...
}

def addComment = {
      letter.addToComents(  new Comment() ) 
      render(view:'form', model:["letter": letter])
      return
    }

Or it exists better solution? It would be nice:

<g:submitButton name="save" value="save" action="save" />
<g:submitButton name="addComment" value="add" action="addComment"  /> 

Thanks a lot Tom

Upvotes: 5

Views: 17712

Answers (2)

omar
omar

Reputation: 11

For those who are using Twitter Bootstrap plugin (or need something besides text in your button) and want to add a glyphicon to the button, you will need to use the button tag. So you need to do something like

SNIPPET 1.

   <g:form  role="form" method="post">
      ...your inputs

    <button type="submit" name="_action_save">
     <span class="glyphicon glyphicon-ok"></span>
     Save
    </button>

    <button type="submit"  name="_action_saveAndNew">
       <span class="glyphicon glyphicon-ok"></span>
        Save and New
     </button>
  </g:form> 

where in your button you will need to specify the name of your action with the prefix

  _action_ 

to get something like this

   name="_action_yourActionName"

just a little reminder, since I am using twitter Bottstrap plugin 3.0 this is how you add a glyphicon

   <span class="glyphicon glyphicon-ok"></span>

SNIPPET 1. has a similar behaviour to:

   <g:form  role="form" method="post">
      ...your inputs        

    <g:actionSubmit action="save" value="Save" />

    <g:actionSubmit action="saveAndNew"  value="Save and New" />

  </g:form> 

In the end this example help you have a similar behaviour to actionSubmit in cases where you don't want or can't use it. This is only an alternative and it'd be better to use actionSubmit whenever possible.

Upvotes: 0

Mike Sickler
Mike Sickler

Reputation: 34431

Use the g:actionSubmit tag instead.

        <g:form  method="post">
           <g:input name="title" value="${letter.title}" />
           <g:input name="comments[0].text" value="${letter.comments[0].text}" />
           <g:actionSubmit action="save" value="Save" />
           <g:actionSubmit action="addComment" value="Add Comment" />   
        </g:form>   

Upvotes: 14

Related Questions