Pergunta

Eu quero criar dinamicamente controles no meu bean. Eu estou usando JSF 2.0

HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();

Agora que a propriedade de HtmlOutputTag devo definir para definir o conteúdo de HtmlOutputTag?

Foi útil?

Solução

O HtmlOutputTag representa uma tag, não um componente. Em vez disso usar HtmlOutputText. Em seguida, você pode apenas definir a propriedade value, exatamente como você faria em um componente real na página JSF. Se você precisa que ele seja um ValueExpression em vez de um value cru, então você precisa criá-lo usando ExpressionFactory#createValueExpression() . Aqui está um exemplo kickoff:

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

onde o método de conveniência createValueExpression() aqui parecido:

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

escondê-lo longe de alguma classe de utilitário para que você não precisa repetir tudo o que o código novo e de novo;) O argumento valueType, obviamente, deve representar o tipo real da propriedade

.

O resultado final na página JSF deve então ficar assim:

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

Dito isto, dependendo da exigência funcional, não pode realmente ser melhor e formas mais limpas para resolver o requisito funcional. Se você quiser, você pode elaborar um pouco mais sobre ele para que possamos, se necessário sugerir melhores formas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top