Что не так с headerKey=-1?

Что не так с:

<s:select list="fruits" name="fruitSelect" id="fruitSelect"
listKey="fid" listValue="fname" headerKey="-1" headerValue="Pick a fruit!" />

Это значение используется во множестве онлайн-примеров: http://www.coderanch.com/t/439139/Struts/wrong-select http://www.mkyong.com/struts2/struts-2-sselect-drop-down-box-example/

НО фактическая документация (вы можете просмотреть это во всплывающей подсказке в Eclipse, наведя курсор на символ) говорит

Ключ для первого элемента в списке. Не должно быть пусто! «-1» и «верно», «плохо».

-1 кажется мне довольно логичным, и в любом случае это не должно быть допустимым вариантом. «правильно» не имеет для меня смысла ни на каком уровне, поэтому меня это не слишком беспокоит.


person Roger    schedule 28.03.2014    source источник


Ответы (1)


С ключом все в порядке, но с документами может быть немного не так: -1 — целочисленный ключ, '-1' — строка, '' — пустой символ, "" — пустая строка, но ключ не должен быть пустым. Таким образом, -1, '-1', ' ', " " являются допустимыми значениями. Из документов:

«1» — это символ, «01» — это строка, «1» — это строка. Это важно, поскольку, если значение, возвращаемое вашим атрибутом «значение», НЕ того же типа, что и ключ в атрибуте «список», они НЕ СООТВЕТСТВУЮТ, даже если их строковые значения могут быть эквивалентны. Если они не совпадают, ничего в вашем списке не будет выбрано автоматически.

Вы должны предоставить атрибуту listKey соответствующий тип поля, поэтому -1 предназначен для целочисленных числовых типов, а не ' ' и " " для символьных и строковых типов.

Фреймворк использует преобразование типов при сравнении ключей и значений тега select, и чтобы избежать ошибок приведения типов, возникающих где-то во время выполнения OGNL, лучше указывать тип правильно, а два атрибута ключа имеют одинаковый тип. И если значение ключа, которое не должно быть пустым, совпадает со значением, указанным в обоих атрибутах, будет заполнена опция значения заголовка.

person Roman C    schedule 28.03.2014
comment
Этому ответу не уделялось должного внимания, он может вам помочь. - person Roman C; 29.03.2014
comment
Спасибо, очень подробный ответ. Я не заметил, что они специально использовали одинарные кавычки в сообщении. - person Roger; 14.04.2014