[JSF] Message format met argumenten in selectItem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ari3
  • Registratie: Augustus 2002
  • Niet online
In mijn resource bundle:
amountFormat={0,number,currency}

Ik zoek een manier om dynamisch argument 0 in een EL-expressie te kunnen meegeven. Ik weet dat er een outputFormat tag is:
XML:
1
2
3
<h:outputFormat value="#{messages.amountFormat}">
   <f:param value="#{amount}"/>
</h:outputFormat>


Bovenstaande werkt prima, maar hoe krijg je soortgelijk iets voor elkaar in een selectItem tag?
XML:
1
2
3
<c:forEach varStatus="status" var="item" items="#{controller.amountChoiceItems}">
   <f:selectItem itemValue="#{item.value}" itemLabel="#{messages.amountFormat}" />
</c:forEach>

Ik wil dat #{item.value} als argument 0 voor het #{messages.amountFormat} gebruikt wordt zodat het itemLabel correct gerenderd wordt. Oplossingen waarbij een pre-formatted itemLabel aan amountChoiceItems toegevoegd wordt zijn niet gewenst omdat de controller voor meerdere templates gebruikt wordt. Bovendien is dan de presentatie en applicatielogica niet langer gescheiden. De wijzingen kunnen daarom alleen in de templates en/of resource bundles gemaakt worden.

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Je zou hier een functie voor kunnen maken, zodat je iets als #{x:bla(messages.amountFormat, item.value)} als itemLabel kunt gebruiken. Misschien kun je MessageFormat.format(String, Object...) zelfs wel gewoon gebruiken, maar ik weet zo niet of varargs in JSF-functies werken.

Als je JSF 2 gebruikt kun je die c:forEach schrappen overigens, f:selectItems heeft die functionaliteit ingebouwd.