Struts2 文本域动态键属性

Struts2 textfield dynamic key attribute

我正在尝试重构我的代码,我正在寻找动态设置 <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()}'"

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

但是 none 有效,我没有发现任何关于动态键属性的信息。有人知道解决方案吗?

如果您想从 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}" />

请注意,如果您的 type 中有 属性 label 并且 getter 和 setter 正确,那么您可以使用 #type.label #type.getLabel().