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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top