Атрибут динамического ключа текстового поля Struts2

Я пытаюсь реорганизовать свой код и ищу возможность динамически установить ключевой атрибут <s:textfield>.

Итак, мой код выглядит так:

<s:set name="type" value="%{process.commands[%{#counter}].type}"/>
<s:if test="%{#type.getLabel() == 'Start'}">
    <s:textfield name="process.commands[%{#counter}].statement" 
                  key="lbl.commandType.start"/>
</s:if>
<s:if test="%{#type.getLabel() == 'Stop'}">
    <s:textfield name="process.commands[%{#counter}].statement" 
                  key="lbl.commandType.stop"/>
</s:if>
<s:if test="%{#type.getLabel() == 'Check'}">
    <s:textfield name="process.commands[%{#counter}].statement" 
                  key="lbl.commandType.check"/>
</s:if>  

но на самом деле я ищу что-то вроде этого, поэтому оно будет в одной строке:

key="lbl.commandType.'%{#type.getLabel()}'"

or

key="lbl.commandType.<s:property value='#type.getLabel()'/>"/>

но ничего из этого не работает, и я ничего не нашел о атрибуте динамического ключа. Кто-нибудь знает решение?


person John    schedule 04.04.2016    source источник


Ответы (1)


Если вы хотите получить метку поля из ресурсов i18n, используйте атрибут label и метод getText для получения значения из ресурсов.

<s:textfield name="process.commands[%{#counter}].statement" 
             label="%{getText('lbl.commandType.' + #type.getLabel())}" />

Или используя <s:text> вместо getText.

<s:text var="labelText" name="%{'lbl.commandType.' + #type.getLabel()}" />

<s:textfield name="process.commands[%{#counter}].statement" label="%{#labelText}" />

Обратите внимание, что если у вас есть свойство label в вашем type с правильным геттером и сеттером, вы можете использовать #type.label вместо #type.getLabel().

person Aleksandr M    schedule 05.04.2016