2011-04-06 58 views
0

我有一個名爲Screening的主控制器。 我已經構建了此控制器的視圖工作流程(例如:創建,編輯,列表,顯示)。Grails formRemote - 如何避免在多表單上重定向?

在我的編輯視圖中,我使用的是Jquery TABS(每個選項卡從與域關聯的模板中獲取內容)。所以總結起來:

Controller (Screening) -> Edit View -> tabs -> Eligibility Inclusion(tab - template/domain) 
               Eligibility Exclusion(tab - template/domain) 
               Demographics(tab - template/domain) 

所以,在我的篩選編輯視圖中,我使用formRemote添加模板部分,例如:

<div id="tabs"> 
<ul> 
  <li><a href="#demographics"><span>Demographics</span></a></li> 
</ul> 

<div id="demographics"> 
<g:formRemote url="[controller:'demographics', action:'update']" update="ajaxMessage" name="demographicsForm"> 
<span class="onvButton"><g:actionSubmit value="Save" action="update" /></span> 
<g:render template="/demographics/editDemographics" model="[demographicsInstance:demographicsInstance]" /> 
</g:formRemote> 
</div> 

我想繼續驗證/節約篩選視圖,我該如何處理?其實,如果用戶嘗試保存(或者如果驗證失敗),它們會被重定向到人口統計控制器/視圖;如何避免這一點?我不希望用戶重定向。
在一個控制器/域中處理多表單(有模板/域關聯)是否有最好的方法?

回答

0

這聽起來做的東西:

控制器:

def saveRemote = { 

    def remoteT1Instance = new RemoteT1(params) 
    if (remoteT1Instance.save(flush: true)) { 
     flash.message = "${message(code: 'default.created.message', args: [message(code: 'remoteT1.label', default: 'RemoteT1'), remoteT1Instance.id])}" 
    } 
    else { 
     flash.message = null 
    } 
    render(template: "remote", model: [remoteT1Instance: remoteT1Instance]) 
} 

index.gsp中:

<div id="updateArea"> 
    <g:render template="/remoteT1/remote"/> 
</div> 

_remote.gsp(模板):

<g:if test="${flash.message}"> 
      <div class="message">${flash.message}</div> 
      </g:if> 
      <g:hasErrors bean="${remoteT1Instance}"> 
      <div class="errors"> 
       <g:renderErrors bean="${remoteT1Instance}" as="list" /> 
      </div> 
      </g:hasErrors> 

      <g:formRemote 
       name="editForm" 
       url="[controller:'remoteT1', action:'saveRemote']" 
       update="updateArea"> 
        <table> 
         <tbody> 

          <tr class="prop"> 
           <td valign="top" class="name"> 
            <label for="nom"><g:message code="remoteT1.nom.label" default="Nom" /></label> 
           </td> 
           <td valign="top" class="value ${hasErrors(bean: remoteT1Instance, field: 'nom', 'errors')}"> 
            <g:textField name="nom" value="${remoteT1Instance?.nom}" /> 
           </td> 
          </tr> 

          <tr class="prop"> 
           <td valign="top" class="name"> 
            <label for="prenom"><g:message code="remoteT1.prenom.label" default="Prenom" /></label> 
           </td> 
           <td valign="top" class="value ${hasErrors(bean: remoteT1Instance, field: 'prenom', 'errors')}"> 
            <g:textField name="prenom" value="${remoteT1Instance?.prenom}" /> 
           </td> 
          </tr> 

          <tr class="prop"> 
           <td valign="top" class="name"> 
            <label for="password"><g:message code="remoteT1.password.label" default="Password" /></label> 
           </td> 
           <td valign="top" class="value ${hasErrors(bean: remoteT1Instance, field: 'password', 'errors')}"> 
            <g:textField name="password" value="${remoteT1Instance?.password}" /> 
           </td> 
          </tr> 

          <div id='reply2'></div> 

         </tbody> 
        </table> 

       <div class="buttons"> 
        <span class="button"><input type="submit" value="Register"/></span> 
       </div> 
      </g:formRemote> 

如果我嘗試使用: update =「[success:'reply2',failure:'updateArea']」在我的g:formRemote中,它聽起來不起作用,我得到2個div(舊的和新的)。我認爲這是一個JavaScript問題。

有人得到更好的東西?