2

<g:select>的 GSP 中有一个如下所示:

<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>

例如,如果我将valuein my更改<g:select>为“3”,则选择第 3 个选项,但无论出于何种原因,第 49 个项目仍会被选中。

编辑:更奇怪的是,如果我将value属性更改为大于49 的值,则选择有效,并且只选择了第 n 个选项!

更新:我发布了一个答案,详细说明了它是如何工作的,但我仍然不明白<g:select>标签的原始行为。

有谁知道这里发生了什么?


Grails 版本: 2.2.0

4

3 回答 3

4

我知道我有点晚了,但我今天遇到了这个问题。首先,我认为这实际上是一个错误,不知道是否被报告,但可能与数据类型有关。
您的方法工作正常,但仅当我们不需要动态选择值时。为此,只需将绑定值转换为 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之后使用。我希望它可以帮助某人,并回答您关于为什么会发生这种情况的问题。但实际上,它应该被报告为一个错误。

于 2014-06-26T15:01:49.373 回答
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>标签如何允许不是多选的选择控件默认具有多个选定项。对我来说,这看起来像一个错误。

于 2013-03-21T09:38:35.053 回答
1

为它使用 value 属性

value="${location ?: 49}"  

例如

<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="${location ?: 49}" class="many-to-one"/>
于 2013-03-21T09:38:00.297 回答