2016-04-04 83 views
1

我想重構我的代碼,我正在尋找動態設置<s:textfield>的關鍵屬性的可能性。Struts2 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()'/>"/> 

但這些都不起作用,我沒有找到關於動態密鑰屬性的任何信息。有誰知道一個解決方案?

回答

3

如果您想從國際資源中獲取字段標籤,請使用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()