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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top