En mi página JSF2, estoy usando mensajes de error internacionalizados.JSF <h: outputFormat>: use valores de matriz como parámetros
En mi bean de respaldo, estoy poniendo los mensajes en el Alcance del flash:
flash.put("error", exception.getType());
En la página, esta cadena se traduce de esta manera:
<h:outputText value="#{bundle[flash.error]}"/>
funciona bien.
AHORA quiero también poder poner (un número arbitrario de) parámetros en el texto del mensaje, que se insertan en los marcadores de posición en la propiedad i18n en mi message.properties. Por lo tanto, estoy poniendo los parámetros como una matriz de cadenas en el Alcance del flash, así:
//exception.getParameters returns String[]
flash.put("errorParams", exception.getParameters())
Ahora también quiero ser capaz de utilizar esta matriz de cadena como parámetros para un elemento outputFormat, para insertarlos en una propiedad como Welcome, {0} {1}
. así que traté de lograr esto mediante el uso de ui: repetir:
<h:outputFormat value="#{bundle[flash.error]}" rendered="#{! empty flash.error}" class="invalid">
<ui:repeat value="#{flash.errorParams}" var="_param">
<f:param value="#{bundle[_param]}"/>
<!-- also doesn't work: <f:param value="#{_param}"/>-->
</ui:repeat>
</h:outputFormat>
Por desgracia, el valor de parámetro se ignora y los marcadores de posición de la i18n-propiedad no se sustituyen, por lo que el resultado representado es Welcome, {0} {1}
. Cuando se usa un repetidor "regular", mostrando los elementos de la matriz como un texto de salida, funciona. Por lo tanto, la etiqueta outputFormat no parece apoyar el uso de una repetición como un niño. Maldita sea, tan cerca;) ¿Alguien sabe una buena manera de hacer lo que quiero, o hay alguna biblioteca componente que soporte algo así?
Funciona como un encanto. ¡¡¡Muchas gracias!!! – ifischer
De nada. Interesante caso de uso del alcance del flash por cierto. – BalusC
Sí, lo descubrí hace unos días. Tuve problemas con FacesMessages ya que no sobreviven a los redireccionamientos (lo que hago a menudo), así que estoy usando el Flash-Scope, que es un reemplazo ideal. – ifischer