Wie kann ich den Wert von HtmlOutputTag in JSF eingestellt?
Frage
Ich mag Kontrollen in meiner Bohne dynamisch erstellen. Ich verwende JSF 2.0
HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();
Nun, welche Eigenschaft von HtmlOutputTag
soll ich den Inhalt von HtmlOutputTag
setzen?
Lösung
Die HtmlOutputTag
repräsentiert einen Tag, nicht eine Komponente. Vielmehr nutzen HtmlOutputText
. Dann können Sie einfach die value
Eigenschaft, genau so, wie Sie in einer realen Komponente in der JSF-Seite tun würden. Wenn Sie es benötigen ein ValueExpression
zu sein, anstatt ein rohes value
, dann brauchen Sie, es erstellen mit ExpressionFactory#createValueExpression()
. Hier ist ein Kick-off-Beispiel:
HtmlOutputText text = new HtmlOutputText();
text.setValueExpression("value", createValueExpression("#{bean.property}", String.class));
, wo die bequeme Methode createValueExpression()
hier wie folgt aussehen:
private static ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().getExpressionFactory()
.createValueExpression(context.getELContext(), valueExpression, valueType);
}
verstecken sie weit weg in einiger Utility-Klasse, so dass Sie nicht brauchen alle, dass Code immer wieder zu wiederholen;) Das valueType
Argument offensichtlich die tatsächliche Art der Immobilie darstellen sollte
Das Endergebnis in der JSF-Seite sollte dann so aussehen:
<h:outputText value="#{bean.property}" />
sagte, dass, abhängig von der Funktionsanforderung, es kann in der Tat besser und saubere Möglichkeiten, um die funktionale Anforderung zu lösen. Wenn Sie möchten, können Sie ein bisschen mehr darüber erarbeiten, damit wir bei Bedarf bessere Möglichkeiten vorschlagen.
Andere Tipps
Wie üblich , mein Rat wäre, um nicht hinzufügen / entfernen-Komponente dynamisch. Lösen Sie Ihr Problem eine andere Art und Weise:
- Toggle Sichtbarkeit von Komponenten
- Rebind Daten Zugehörigkeit zu einer Komponente
Hinzufügen / Entfernen Komponente dynamisch ist immer eine Quelle von Schwierigkeiten und Chancen, dass Sie es eine andere Art und Weise tun können, viel einfacher.
Die outputText
Komponente ist einfach zu bedienen:
<h:outputText value="#{BackingBean.myProperty}"/>
Und Sie definieren einen Getter / Setter für myProperty
in Ihrem Backing Bean. Wenn Sie es wirklich tun wollen programmatisch (was ich entmutigen, wenn Sie starke Argumente haben), hier ist ein Beispiel mit einer dynamischen Tabelle.