Domanda

Voglio creare dinamicamente controlli nel mio fagioli. Sto usando JSF 2.0

HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();

Ora che la proprietà di HtmlOutputTag devo impostare per impostare il contenuto di HtmlOutputTag?

È stato utile?

Soluzione

Il HtmlOutputTag rappresenta un tag, non un componente. Piuttosto utilizzare HtmlOutputText. Quindi, si può solo impostare la proprietà value, esattamente come si farebbe in una componente reale nella pagina JSF. Se avete bisogno di essere un ValueExpression piuttosto che un value grezzo, quindi è necessario creare utilizzando ExpressionFactory#createValueExpression() . Ecco un esempio kickoff:

HtmlOutputText text = new HtmlOutputText();
text.setValueExpression("value", createValueExpression("#{bean.property}", String.class));

dove il metodo comodo createValueExpression() qui apparire come:

private static ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
    FacesContext context = FacesContext.getCurrentInstance();
    return context.getApplication().getExpressionFactory()
        .createValueExpression(context.getELContext(), valueExpression, valueType);
}

nasconderlo lontano in qualche classe di utilità in modo che non c'è bisogno di ripetere ancora e ancora tutto ciò che il codice;.) L'argomento valueType ovviamente dovrebbe rappresentare il tipo effettivo della proprietà

Il risultato finale nella pagina JSF dovrebbe quindi simile a questa:

<h:outputText value="#{bean.property}" />

Detto questo, a seconda del requisito funzionale, ci possono infatti essere modi migliori e più pulite per risolvere il requisito funzionale. Se si desidera, è possibile elaborare un po 'più su di esso in modo che possiamo, se necessario, suggerire modi migliori.

Altri suggerimenti

, il mio consiglio è di non aggiungere / rimuovere componenti in modo dinamico. Risolvere il problema in un altro modo:

  • Attiva visibilità dei componenti
  • Rebind dati appartenente ad un componente

L'aggiunta / rimozione di componenti in modo dinamico è sempre una fonte di guai e le probabilità sono che si può fare in un altro modo molto più semplice.

Il componente outputText è facile da usare:

<h:outputText value="#{BackingBean.myProperty}"/>

E si definisce un getter / setter per myProperty nel backing bean. Se si vuole veramente fare a livello di codice (che ho scoraggiare se non avete argomenti forti), qui è un esempio con una tabella dinamica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top