hasMany的Grails动态脚手架:它是一个错误还是我错误配置?
我是一个Grails noob,遇到了一个似乎是bug的东西,但完全有可能我没有正确配置所有东西。
我有两个简单的领域类:
class Player {
String firstName
String lastName
static constraints = {
firstName(blank:false)
lastName(blank:false)
}
String toString() { lastName + ", " + firstName }
}
和
class Team {
String mascot;
static hasMany = [players:Player]
static constraints = {
mascot(blank:false)
}
}
我有两个控制器,除了动态脚手架这两个域类之外什么都不做。
但即使我的数据库中有玩家名单,在创建新的团队时,我也没有为他们选择多选框。
但是,当我去编辑一个团队时,会出现多重选择
这是一个新项目动态脚手架中的错误,我误解了这应该如何工作,或者有什么我需要在这里声明?
任何帮助非常感谢! 我有截图StackOverflow不会让我添加,因为我的新颖,但我很乐意给他们另一种方式,如果这将有所帮助。
我终于明白了这一点,并希望传递我为了防止其他人遇到它而做的事情。
当我为Team生成视图时,edit.gsp中的表单块如下所示:
<input type="hidden" name="id" value="${teamInstance?.id}" />
<input type="hidden" name="version" value="${teamInstance?.version}" />
<div class="dialog">
<table>
<tbody>
<tr class="prop">
<td valign="top" class="name">
<label for="mascot">Mascot:</label>
</td>
<td valign="top" class="value ${hasErrors(bean:teamInstance,field:'mascot','errors')}">
<input type="text" id="mascot" name="mascot" value="${fieldValue(bean:teamInstance,field:'mascot')}"/>
</td>
</tr>
<tr class="prop">
<td valign="top" class="name">
<label for="players">Players:</label>
</td>
<td valign="top" class="value ${hasErrors(bean:teamInstance,field:'players','errors')}">
<g:select name="players"
from="${Player.list()}"
size="5" multiple="yes" optionKey="id"
value="${teamInstance?.players}" />
</td>
</tr>
</tbody>
</table>
</div>
<div class="buttons">
<span class="button"><g:actionSubmit class="save" value="Update" /></span>
<span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>
</div>
</g:form>
但create.gsp中的表单块如下所示:
<g:form action="save" method="post" >
<div class="dialog">
<table>
<tbody>
<tr class="prop">
<td valign="top" class="name">
<label for="mascot">Mascot:</label>
</td>
<td valign="top" class="value ${hasErrors(bean:teamInstance,field:'mascot','errors')}">
<input type="text" id="mascot" name="mascot" value="${fieldValue(bean:teamInstance,field:'mascot')}"/>
</td>
</tr>
</tbody>
</table>
</div>
<div class="buttons">
<span class="button"><input class="save" type="submit" value="Create" /></span>
</div>
</g:form>
换句话说,对于这种情况,默认的创建视图省略了小部件以正确显示多选列表。 当我复制和粘贴缺少的代码时,动态脚手架的控制器将其捡起并按预期保存。 所以,这绝对是视图生成代码中的一个错误。
是的,默认的脚手架在子类的“创建/编辑”页面中放置了一个父选择器。
我猜这对他们来说更容易。 它不应该是一个多重选择,只是一个下拉单选,因为它是一对多的。
正如你所解释的你想要更多的多对多关系,你可以尝试添加:
static hasMany = [teams:Team]
到您的播放器类。 我发现Grails在双向关系方面表现更好。 在构建搜索查询时也很有用,并且不应超过您已经需要的一个关系表。
如果您在使用Grails pre-v1.1之前,多对多关系不直接受支持,所以即使添加静态hasMany也不是完整的解决方案,因为您需要管理添加到其他当你添加到一个方向时列出。 我还没有使用过v1.1,所以我不能说说需要什么来指定其中的多对多。
我使用Grails的当前版本(v1.3.4)遇到了同样的问题。 必须手动修改create.gsp
链接地址: http://www.djcxy.com/p/42499.html上一篇: Grails dynamic scaffold with hasMany: is it a bug or am I misconfiguring?