我有這兩種方法創建一個新的域: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?