2013-03-21 1 views
2

Я имею в <g:select> один из моих GSPs который выглядит следующим образом:Single выберите <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», например, выбирается третий вариант, но по какой-либо причине 49-й элемент все еще выбирается.

Edit: Еще более странно, если бы я изменить value свойство значения больше 49, то выберите работы и только выбирается п-й вариант!

Обновление: Я разместил ответ, подробно рассказывающий, как я его работаю, но я до сих пор не понимаю оригинального поведения тега <g:select>.

Есть ли у кого-нибудь идеи относительно того, что здесь происходит? версия


Grails: 2.2.0

+2

Опция 49 выбирается «1», потому что «1» имеет значение ASCII 49 (я просто потратил половину рабочего дня на отслеживание той же ошибки. Arghhhh) – sebnukem

ответ

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

Это похоже на то, что я сделал, но я все еще делаю не понимаю, почему мое первоначальное значение «value» привело к множественным выборам. Вы можете мне это объяснить? – Stephan

+0

@Stephan Я не вижу проблемы в этом коде. Может быть проблема где-то в другой части кода – Ilya

+0

Любой ключ к какой логической ошибке может привести к этому? Я совершенно новый Go Grails, и, кроме того, кода не намного больше, чем это ... – Stephan

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> может разрешить элементу управления select, который равен , а не, чтобы иметь более одного выбранного элемента по умолчанию. Для меня это похоже на ошибку.

+3

«1» - 49 (в ASCII). «$ {1}» - это номер 1. – sebnukem

3

Я знаю, что я немного опоздал, но сегодня у меня была эта проблема. Прежде всего, я считаю, что это ошибка на самом деле, не знаю, было ли это сообщено, но, возможно, связано с типами данных.
Ваш подход работает отлично, но только тогда, когда нам не нужно делать значение, выбранное динамически.Для этого, просто бросить переплетены значение как целое (Long, или любой другой тип вы ищете), как это:

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

Может быть использовано после fieldValue тоже. Я надеюсь, что это может помочь кому-то, и ответит на ваш вопрос о том, почему это происходит. Но действительно, это должно быть сообщено как ошибка.

 Смежные вопросы

  • Нет связанных вопросов^_^