2016-04-04 13 views
1

Ich versuche, meinen Code zu refaktorieren, und ich suche nach einer Möglichkeit, das Schlüsselattribut von <s:textfield> dynamisch festzulegen.Struts2 Textfeld dynamisches Schlüsselattribut

So sieht mein Code wie folgt aus:

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

aber was ist so etwas wie dieses ich eigentlich auf der Suche so wird es in einer Zeile:

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

oder

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

aber nichts davon funktioniert und ich habe nichts über ein dynamisches Schlüsselattribut gefunden. Kennt jemand eine Lösung?

Antwort

3

Wenn Sie die Feldbezeichnung von i18n-Ressourcen abrufen möchten, verwenden Sie das label-Attribut und die getText-Methode, um den Wert von Ressourcen tatsächlich abzurufen.

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

Oder <s:text> statt getText verwenden.

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

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

Beachten Sie, dass, wenn Sie Eigenschaft haben label in Ihrem type mit der richtigen Getter und Setter dann Sie #type.label statt #type.getLabel() verwenden können.