Использование пользовательского атрибута данных в Struts 2 s: select

Я пытаюсь использовать пользовательские атрибуты данных HTML в тегах Struts2, вот мой пример кода

<s:select list="myList" listKey="myListVal"  listValue="myListDesc"  data-inputs="myListInput" ></s:select>

я ожидал что-то вроде этого, например

<select >
     <option value="myListVal1" data-inputs="myListInput1">myListDesc1</option>
     <option value="myListVal2" data-inputs="myListInput2">myListDesc2</option>
     <option value="myListVal3" data-inputs="myListInput3">myListDesc3</option>
</select>

вместо этого я получаю это

<select data-inputs="myListInput" >
     <option value="myListVal1" >myListDesc1</option>
     <option value="myListVal2" >myListDesc2</option>
     <option value="myListVal3" >myListDesc3</option>
</select>

Можно ли описать атрибут данных в тегах выбора struts для параметров внутри него.


person wh0    schedule 19.11.2012    source источник
comment
Я не уверен, почему вы этого ожидали; нет механизма, чтобы установить атрибут в одном теге и заставить S2 выяснить, где он должен появиться.   -  person Dave Newton    schedule 19.11.2012


Ответы (2)


Переопределите шаблон тега <s:select>. Или просто используйте теги HTML с <s:iterator>

<select name="list">
   <s:iterator value="myList" status="stat">
      <option value="<s:property value="myListVal"/>" data-inputs="myListInput<s:property value="#stat.index"/>"><s:property value="myListDesc"/></option>
   </s:iterator>
</select>
person Aleksandr M    schedule 19.11.2012

Вы не можете вставлять пользовательские атрибуты непосредственно в тег пользовательского интерфейса Struts2.

Согласно комментарию Дэйва Ньютона, вы можете использовать Struts2 >= 2.1.x

Но по-прежнему невозможно применить их к элементам option вместо select, поэтому я оставлю ответ на случай, если вам понадобится расширить исходный тег select, чтобы определить пользовательское поведение (например, применить определенные атрибуты к параметрам).


Вы можете extend тег <s:select> Struts2, чтобы он мог управлять атрибутами нового типа...: http://bodez.wordpress.com/2009/03/13/customising-struts2-jsp-tags/,

или создайте свой собственный тег напрямую, но в вашем случае это будет излишним: http://joshuajava.wordpress.com/2008/12/27/creating-custom-components-with-struts-2/).

И последнее, но не менее важное: вы даже можете добавить свои пользовательские атрибуты после отображения страницы, используя что-то вроде jQuery (демонстрация: http://jsfiddle.net/CLNDs/); они будут доступны, но не видны в источнике.

person Andrea Ligios    schedule 19.11.2012
comment
Вы можете, просто нет никакой магии, чтобы атрибут отображался в произвольных элементах. - person Dave Newton; 19.11.2012
comment
Действительно ? Как ? Просто написать это прямо в теге? Попробую прямо сейчас, спасибо - person Andrea Ligios; 19.11.2012
comment
@DaveNewton: я продолжаю получать ошибки компиляции Javelin9 JSP; Я использую Struts 2.0.14 (из-за стандартов компании). Может быть, режим «дословно» разрешен в более поздних версиях Struts2? - person Andrea Ligios; 19.11.2012
comment
Он был представлен в версии 2.1+, правда, я не помню точно, в какой версии. - person Dave Newton; 19.11.2012
comment
Загадка разгадана, спасибо. Мы ДЕЙСТВИТЕЛЬНО должны изменить эти устаревшие стандарты и перейти на Struts 2.3 :/ - person Andrea Ligios; 19.11.2012