2017-07-27 32 views
0

我有這兩種方法創建一個新的域:Grails的保存方法,沒有記錯的方法,如果有錯誤

第一個是修改創建()方法,而不是隻響應子域創建參數的形式爲(在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 ] 
    } 

第二個是保存()方法

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")    
} 

子域必須有一個獨特的名字,如果我創建具有相同名稱的子域,我希望它在顯示錯誤消息在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?

回答

0

在newSubDomain中,您編組domainList的數據,併爲newSubDomain視圖提供一個新的子域以供其使用。

在saveSubDomain中,該方法僅接收子域對象。當找到錯誤時,saveSubDomain控制器方法使用它所具有的數據將用戶發送回newSubDomain視圖 - 但saveSubDomain方法沒有填充的domainList變量。所以視圖沒有顯示的domainList數據。