¿Cómo se configura el valor de HtmlOutputTag en JSF?
Pregunta
Quiero crear dinámicamente controles en mi frijol. Estoy usando JSF 2.0
HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();
Ahora que la propiedad de HtmlOutputTag
debería establecer para ajustar el contenido de HtmlOutputTag
?
Solución
El HtmlOutputTag
representa una etiqueta, no un componente. utilizar Más bien HtmlOutputText
. Entonces, sólo puede establecer la propiedad value
, exactamente como lo haría en un componente real en la página JSF. Si necesita que sea un ValueExpression
en lugar de un value
prima, entonces usted necesita para crearlo usando ExpressionFactory#createValueExpression()
. He aquí un ejemplo patada de salida:
HtmlOutputText text = new HtmlOutputText();
text.setValueExpression("value", createValueExpression("#{bean.property}", String.class));
donde el método createValueExpression()
conveniencia aquí se parece a:
private static ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().getExpressionFactory()
.createValueExpression(context.getELContext(), valueExpression, valueType);
}
ocultarlo lejos de alguna clase de utilidad de manera que no es necesario repetir todo ese código una y otra vez;). El argumento valueType
, obviamente, debe representar el tipo real de la propiedad
El resultado final en la página JSF debería tener el siguiente aspecto:
<h:outputText value="#{bean.property}" />
Una vez dicho esto, dependiendo del requerimiento funcional, ciertamente puede haber formas mejores y más limpias para resolver el requisito funcional. Si lo desea, puede elaborar un poco más sobre él de modo que poder si es necesario sugerir mejores maneras.
Otros consejos
costumbre, mi consejo es que no se añadir / quitar componente dinámicamente. Resolver su problema de otra manera:
- Toggle visibilidad de los componentes
- volver a vincular el datos perteneciente a un componente
Agregar / eliminar componentes de forma dinámica es siempre una fuente de problemas y lo más probable es que se puede hacer de otra manera mucho más simple.
El componente outputText
es fácil de usar:
<h:outputText value="#{BackingBean.myProperty}"/>
Y se define un captador / definidor de myProperty
en su bean de respaldo. Si realmente quiere hacerlo mediante programación (que desalentar a menos que tenga argumentos fuertes), aquí es un ejemplo con una tabla dinámica.