Использование ‹s:set /› для динамического создания имени элемента

Я хочу повторно использовать набор элементов поля HTML и создать атрибуты «имя» в struts из переменной. Я видел это Как создать уникальный HTML id в теге итератора Struts 2 и решил, что мог бы использовать что-то подобное, но не могу заставить его работать. Кажется, я могу создать атрибут имени из переменной struts только в цикле итератора. Как я могу сделать это с помощью простой переменной?

Вот мой код, сначала пытающийся использовать переменную, второй с использованием итератора:

<s:set var="type" value="Main" />
<s:textfield name="prefix%{#type}.Name"/>

<s:set var="AList" value="{'Main'}" />
<s:iterator value="AList" var="Ltype">
    <s:textfield name="prefix%{#Ltype}.Name"/>
</s:iterator>

Это генерирует 2 элемента:

<input type="text" name="prefix.Name"     value="">
<input type="text" name="prefixMain.Name" value="">

при этом первая не заменяет переменную, а цикл итератора работает.

Почему это не работает и как я могу это сделать?


person user3708842    schedule 04.06.2015    source источник


Ответы (1)


Вы присваиваете значение первой переменной, а не строковому литералу, и поскольку в вашем ValueStack нет объекта с именем Main, вы присваиваете значение пустая строка в переменную type:

<s:set var="type" value="Main" />

в то время как вы делаете это (почти) отлично во втором примере:

<s:set var="AList" value="{'Main'}" />

Просто используйте

<s:set var="AList" value="%{'Main'}" />

or

<s:set var="AList" value="'Main'" />

везде и будет работать.

{} сам по себе бесполезен и опасен, потому что он имеет особое значение в OGNL (проекция списка, выбор списка и т. д.)

person Andrea Ligios    schedule 04.06.2015
comment
Спасибо! Я добавил кавычки вокруг строкового литерала, чтобы он работал: ‹s:set var=type value='Main' /› - person user3708842; 04.06.2015