2013-03-21 119 views
2

产生比一个“选择”项目的更多我有一个<g: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> 

如果我更改了我的<g:select>到“3” value例如,第三个选项被选中,但无论出于何种原因,第49项仍然被选中。

编辑:更奇怪的,如果我的value属性更改为一个值大于 49,选择作品和其中只有第N选项被选中!

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

有没有人对这里发生了什么有什么想法?


的Grails版本: 2.2.0

+2

选项49被选为“1”,因为“1”的ASCII值为49(我只是用了一半的工作时间来跟踪相同的错误)唉唉唉唉嘿嘿 – sebnukem 2014-07-16 20:13:50

回答

1

使用价值属性为它

value="${location ?: 49}" 

例如

<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="${location ?: 49}" class="many-to-one"/> 
+0

这与我所做的类似,但我仍然这么做不明白为什么我原来的“价值”会导致多重选择。你能解释一下吗? – Stephan 2013-03-21 09:39:38

+0

@Stephan我在这段代码中看不到问题。可能是代码 – Ilya 2013-03-21 10:02:25

+0

的另一部分某处的任何线索可能导致此问题的逻辑错误的任何线索?我很新的去了Grails,而且没有比这更多的代码... – Stephan 2013-03-21 10:17:23

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>标记如何允许选择控件是而不是多重选择默认情况下具有多个选定项目。对我来说,这看起来像一个错误。

+3

“1”是49(ASCII)。 “$ {1}”是数字1。 – sebnukem 2014-07-16 20:15:41

3

我知道我有点晚了,但今天我有这个问题。首先,我认为这实际上是一个错误,不知道它是否被报告过,但可能与数据类型有关。
您的方法正常工作,但只有当我们不需要动态选择一个值。对于这一点,只投绑定的值作为整数(长,或任何你正在寻找的类型),像这样:

<g:select id="location" name="criteria.location" from="${example.Location.list()}" optionKey="id" required="" value="${yourVarName as Integer}" class="many-to-one"/> 

可用于后fieldValue方法了。 我希望它可以帮助某人,并回答你为什么会发生这样的问题。但的确,它应该被报告为一个错误。

相关问题