Как направить кнопку для отправки в другое действие - PullRequest
5 голосов
/ 10 июня 2010

как перейти к другому действию в контроллере?

У меня есть форма и несколько кнопок отправки. У каждой кнопки отправки есть имя.

<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 = {
      ...
    }

Это работает, но это не хорошо. Я хочу переместить код из блока "addComment" в действие 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
    }

Или существует лучшее решение? Было бы неплохо:

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

Большое спасибо Том

Ответы [ 2 ]

13 голосов
/ 10 июня 2010

Вместо этого используйте тег g: actionSubmit .

        <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>   
0 голосов
/ 14 февраля 2014

Для тех, кто использует плагин Twitter Bootstrap (или нуждается в чем-то помимо текста в кнопке) и хочет добавить глифик к кнопке, вам нужно будет использовать тег кнопки. Так что вам нужно сделать что-то вроде

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> 

где в вашей кнопке вам нужно будет указать название вашего действия с префиксом

  _action_ 

чтобы получить что-то вроде этого

   name="_action_yourActionName"

просто небольшое напоминание, так как я использую плагин Twitter Bottstrap 3.0, вот как вы добавляете глифик

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

SNIPPET 1. имеет поведение, подобное:

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

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

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

  </g:form> 

В конце этот пример поможет вам вести себя аналогично actionSubmit в тех случаях, когда вы не хотите или не можете его использовать. Это всего лишь альтернатива, и было бы лучше использовать actionSubmit, когда это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...