我的一个GSP中有<g:select>
,如下所示:
<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="1" class="many-to-one"/>
预期结果会是这样的,对吗?
预期结果:
<select id="location" name="criteria.location" required="" class="many-to-one" >
<option value="1" selected="selected" >1st Location Name</option>
<option value="2" >2nd Location Name</option>
<option value="3" >3rd Location Name</option>
<!-- entries omitted -->
<option value="49" >49th Location Name</option>
<option value="50" >50th Location Name</option>
</select>
但是我得到了什么?我最终选择了两个项目。第49个选项也被选中,我无法想象为什么!在我的代码中绝对没有提到值“49”...
实际结果:
<select id="location" name="criteria.location" required="" class="many-to-one" >
<option value="1" selected="selected" >1st Location Name</option>
<option value="2" >2nd Location Name</option>
<option value="3" >3rd Location Name</option>
<!-- entries omitted -->
<option value="49" selected="selected" >49th Location Name</option>
<option value="50" >50th Location Name</option>
</select>
例如,如果我将value
中的<g:select>
更改为“3”,则会选择第3个选项,但无论出于何种原因,第49个项目仍会被选中。
编辑:更奇怪的是,如果我将value
属性更改为大于 49的值,则选择有效并且仅选择第n个选项!
更新:我发布了一个详细说明我是如何工作的答案,但我仍然不理解<g:select>
标记的原始行为。
有没有人知道这里发生了什么?
Grails版本: 2.2.0
答案 0 :(得分:3)
我知道我有点晚了,但今天我遇到了这个问题。
首先,我认为它实际上是一个错误,不知道它是否被报告过,但可能与数据类型有关。
您的方法很好,但只有当我们不需要动态选择值时。为此,只需将绑定值转换为Integer(Long,或者您要查找的任何类型),如下所示:
<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="${yourVarName as Integer}" class="many-to-one"/>
也可以在 fieldValue 之后使用。 我希望它可以帮助某人,并回答你关于为什么会发生这种情况的问题。但事实上,它应该被报告为一个错误。
答案 1 :(得分:2)
我想出了如何使它工作,但我仍然无法解释<g:select>
标签的行为。我将value
属性更改为“$ {1}”而不是“1”,如下所示:
<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="${1}" class="many-to-one"/>
我认为标记将我的值解释为字符串而不是数字,但我仍然看不到<g:select>
标记如何允许选择控件不多选默认情况下有多个选定的项目。对我来说,这看起来像一个错误。
答案 2 :(得分:1)
使用值属性
value="${location ?: 49}"
e.g。
<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="${location ?: 49}" class="many-to-one"/>