我正在使用 Grails 2.3.5 并尝试保留来自动态表单的多个域。
为了实现这一点,我使用了惰性列表的方法,如下所述:http://omarello.com/2010/08/grails-one-to-many-dynamic-forms/
表格生成得很好,所有必要的参数都在 params-map 中,
但绑定(bind)到列表不起作用。
过去两天我读了很多关于这个话题的文章,并在 stackoverflow 上找到了很好的答案,
但我认为这些方法仅适用于较旧的 grails 版本。
为了说明我的问题,一些代码:
House.groovy
class House {
....attributes removed to minimize example
List<Adress> adresses = [].withLazyDefault { new Adress() }
// List adresses = ListUtils.lazyList(new ArrayList<Adress>,FactoryUtils.instantiateFactory(Adress.class));
static hasMany = [adresses:Adress]
//def getAdresses(){
//return LazyList.decorate(adresses, FactoryUtils.instantiateFactory(Adress.class))
//}
static mapping = {
adresses cascade:"all-delete-orphan"
}
动态表单模板 --> 正确创建
<div id="adress${i}" class="adresses-div" style="<g:if test="${hidden}">display:none;</g:if>margin-bottom:10px; ">
<g:hiddenField name='adresses[${i}].id' value='${adresses?.id}'/>
<g:hiddenField name='adresses[${i}].deleted' value='false'/>
<g:hiddenField name='adresses[${i}].neu' value="${adresses?.id == null?'true':'false'}"/>
<g:textField name='adresses[${i}].street' value='${adresses?.street}' />
<g:textField name='adresses[${i}].land' value='${adresses?.land}' />
<span class="del-adresses">
<img src="${resource(dir:'images/skin', file:'database_delete.png')}"
style="vertical-align:middle;"/>
</span>
HouseController - 编辑 Action
houseInstance.properties = params
因此,表单模板已正确创建,并且输入值存在于参数映射中。
我现在的问题是从一个表单创建的多个地址的数据绑定(bind)。
根据上面链接提供的示例项目,参数绑定(bind)应该会自动创建新的地址对象并将它们保存为房子的子对象。
在调试我的应用程序时,我可以看到有正确的参数,但似乎列表无法创建新的地址对象。
“地址”列表,绑定(bind)后包含空值--> [null]
如上所述,我为这个问题尝试了一些解决方案,但无法解决它。
可能在 grails 2.3.5 中不支持惰性列表方法,并且仅适用于旧版本。
我希望有人有同样的问题,可以给我一个提示
提前致谢
最佳答案
我有同样问题的经验。
引用:grails 2.3 one-to-many databinding with dynamic forms
尝试删除 id:
如果是新手机,在参数中。用 grails 2.3.11 测试并在我的项目中使用它。
这是我在 _phone.gsp
中所做的更改
<div id="phone${i}" class="phone-div" <g:if test="${hidden}">style="display:none;"</g:if>>
<g:if test="${phone?.id != null}">
<g:hiddenField name='phones[${i}].id' value='${phone?.id}'/>
</g:if>
...
</div>
感谢@hakuna1811
关于forms - Grails 具有动态表单的一对多数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22480803/