2016-05-09 4 views
2

Hallo Ich versuche, einen String-Wert zu einem Wert Ausdruck hinzuzufügen. In meinem xhtml Code manchmal verwendet, ich Dinge wie dies zu tun:Wie eine Zeichenfolge zu ValueExpresion programmatisch hinzugefügt werden

<h:outputText value="#{myBean.value} %" /> 

es eine einfache Möglichkeit, ‚%‘ Symbol output hinzuzufügen.

Wie kann ich es programmatisch erreichen?

Ich bin in der Lage einen Wert expresion hinzuzufügen:

final HtmlOutputText outputText = JSFUtils.createComponent(HtmlOutputText.COMPONENT_TYPE); 
final ValueExpression exp = JSFUtils.valueExpresion("gasto.porcentajeTotal"); 
outputText.setValueExpresion("value", exp); 

, aber ich weiß nicht, wie '%' Symbol

Danke hinzuzufügen.

+2

Dies ist kein guter Ansatz ist, der 'Setter' das muss vom inputText aufgerufen werden, ist dann ungültig. Der volle Wert von inputText muss sich auf ein Feld beziehen, "# {myBean.value}%" ist kein Verweis auf einen Setter. – Kukeltje

+0

Programmatisch oder nicht, wird dies in der Tat immer mit einer "PropertyNotWritableException" enden. Also deine Aussage * "In meinem XHTML-Code habe ich manchmal Dinge wie diese gemacht" * ist eigentlich ungültig. Dies ist technisch auf Eingabefeldern unmöglich. – BalusC

+0

Ja BalusC, Sie haben völlig Recht. Ich bearbeite meine Frage – Juan

Antwort

1

Es sieht aus wie das Problem in Ihrer Hilfsmethode ist, dass es #{ und } nicht angeben kann, da es es bereits "automatisch" umschließt. Wenn Sie die Verantwortung an den Aufrufer verschieben, sollten Sie in der Lage sein, die Aufgabe zu erfüllen.

Unterhalb dem kanonischen Weg, um einen Wert für den Ausdruck (copied von OmniFacesComponents) zu erstellen:

public static ValueExpression createValueExpression(String expression, Class<?> type) { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    return context.getApplication().getExpressionFactory().createValueExpression(
     context.getELContext(), expression, type); 
} 

Dies verwendet werden kann als:

ValueExpression ve = createValueExpresion("#{myBean.value} %", String.class); 
+0

Vielen Dank @BalusC. Ich habe deine Antwort geupdated :) – Juan