单选<g:select>默认生成多个“已选择”项目</g:select>

时间:2013-03-21 09:18:01

标签: grails gsp html-select

我的一个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

3 个答案:

答案 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"/>