【发布时间】: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?
【问题讨论】: