Sur ma page JSF2, j'utilise des messages d'erreur internationalisés.JSF <h: outputFormat>: utilise des valeurs de tableau en tant que paramètres
Dans mon grain de soutien, je mets les messages dans le flash Portée:
flash.put("error", exception.getType());
Sur la page, cette chaîne se traduit ainsi:
<h:outputText value="#{bundle[flash.error]}"/>
fonctionne très bien.
Maintenant, je veux être également en mesure de mettre (un nombre arbitraire de) paramètres dans le texte du message, qui sont insérés dans les espaces réservés dans la propriété i18n dans mon message.properties. Par conséquent, je mets les paramètres comme un tableau de chaînes dans le champ d'application Flash, comme ceci:
//exception.getParameters returns String[]
flash.put("errorParams", exception.getParameters())
Maintenant, je veux aussi pouvoir utiliser ce tableau String en tant que paramètres pour un élément outputFormat, pour les insérer dans une propriété comme Welcome, {0} {1}
. donc j'ai essayé de le faire en utilisant ui: répéter:
<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>
Malheureusement, la valeur de PARAM est ignorée et les espaces réservés du i18n-propriété ne sont pas remplacés, de sorte que la sortie est rendu Welcome, {0} {1}
. Lorsque vous utilisez un répéteur "normal", en affichant les éléments du tableau comme un texte en sortie, cela fonctionne. Ainsi, la balise outputFormat ne semble pas prendre en charge l'utilisation d'une répétition en tant qu'enfant. Merde, si proche;) Quelqu'un sait-il un bon moyen de faire ce que je veux, ou y at-il une bibliothèque de composants supportant quelque chose comme ça?
Fonctionne comme un charme. Merci beaucoup!!! – ifischer
De rien. Cas d'utilisation intéressant de la portée du flash btw. – BalusC
Oui, je viens de le découvrir il y a quelques jours. J'ai eu des problèmes avec FacesMessages car ils ne survivent pas aux redirections (ce que je fais souvent), donc j'utilise Flash-Scope à la place, ce qui est un remplacement idéal. – ifischer