【问题标题】:Grails save method, doesn't recall method correctly if has errorGrails保存方法,如果有错误则不能正确调用方法
【发布时间】:2017-07-27 23:42:15
【问题描述】:

我有这两种创建新域的方法:

第一个是修改后的 create() 方法,而不是仅响应使用表单中的参数创建的 subDomain(在 newSubDomain 视图中),它还将 userDomainList 传递给 gsp,所以我可以从中创建一个选择。

def newSubDomain() {
        def currentUser = springSecurityService.getCurrentUser() 
        def domainList = currentUser.domains //an hasMany domain for user
        def subDomain = new SubDomain(params)
        [subDomain: subDomain, domainList: domainList ] 
    }

第二个是save()方法

def saveSubDomain(SubDomain subDomain) {

    if (subDomain== null) {
        notFound()
        return
    }

    if (subDomain.hasErrors()) {
        respond subDomain.errors, view:'newSubDomain'
        return
    }

    subDomain.save flush: true    

    redirect(controller: "controller", action: "action")               
}

SubDomain 必须有一个唯一的名称,如果我创建一个具有相同名称的 SubDomain,我希望它在 newSubDomain 视图顶部显示错误消息,这会发生,但是当他回忆传递错误的方法时,它不会重新加载和/或传递“domainList”,这样他就无法在视图中加载选择。

这是 newSubDomain.gsp 视图代码的一部分

<g:hasErrors bean="${this.subDomain}">
        <ul class="errors" role="alert">
            <g:eachError bean="${this.subDomain}" var="error">
                <li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li>
            </g:eachError>
        </ul>
    </g:hasErrors>


    <g:form controller="subDomain " action="saveSubDomain">

        <f:field bean="subDomain " property="name"/>
        <br>
        <f:field bean="subDomain" property="domain">
        <g:select name="domain"
                  from="${domainList}"
                  optionKey="id"
                  optionValue="name"
        />
    </f:field>

        <g:actionSubmit value="Save sub Domain" action="saveSubDomain"/>
    </g:form>

我做错了什么?我不太了解 grails(或一般的 Web 应用程序)有更好的方法来传递参数以从控制器查看?为什么当我再次调用 newSubDomain 视图时遇到错误时没有通过 domainList?

【问题讨论】:

    标签: grails gsp


    【解决方案1】:

    在 newSubDomain 中,您为 domainList 编组数据,并为 newSubDomain 视图提供一个新的 subDomain 以供其使用。

    在 saveSubDomain 中,该方法仅接收子域对象。当发现错误时,saveSubDomain 控制器方法使用它必须将用户发送回 newSubDomain 视图的数据——但 saveSubDomain 方法没有填充的 domainList 变量。所以视图没有要显示的 domainList 数据。

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2014-07-10
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多