【问题标题】:Grails formRemote - how to avoid redirect on multi form?Grails formRemote - 如何避免在多表单上重定向?
【发布时间】:2011-04-06 15:57:58
【问题描述】:

我有一个名为 Screening 的主控制器。 我为此控制器构建了视图工作流(例如:创建、编辑、列出、显示)。

在我的编辑视图中,我使用的是 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> 

我想在筛选视图中保留验证/保存,我该如何处理?
实际上,如果用户尝试保存(或验证失败),他们将被重定向到人口统计控制器/视图;如何避免这种情况?我不希望用户被重定向。
有没有一种在一个控制器/域中处理多表单(带有模板/域关联)的最佳方法?

【问题讨论】:

    标签: grails groovy grails-controller grails-validation


    【解决方案1】:

    这听起来很重要:

    控制器:

    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 问题。

    有人得到了更好的东西吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 2012-05-24
      • 2014-02-11
      相关资源
      最近更新 更多