2016-04-04 12 views
1

私は私のコードをリファクタリングしようとしていると私は動的に<s:textfield>のキー属性を設定する可能性を探しています。Struts2のテキストフィールドの動的キー属性

だから私のコードは次のようになります。

<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> 

が、それは1行になりますので、私が実際に探していることは、このようなものです:

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

または

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

しかし、この作品のどれも私は動的キー属性について何も見つかりませんでした。誰かが解決策を知っていますか?

答えて

3

フィールドラベルをi18nリソースから取得する場合は、属性とgetTextメソッドを使用して、実際にリソースから値を取得します。

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

またはその代わりgetText<s:text>を使用。

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

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

あなたが適切なゲッターとセッターを使用してtypeで財産labelを持っているならば、あなたは#type.label代わりの#type.getLabel()を使用できることに注意してください。

関連する問題