On 11/26/05, Laurie Harper <[EMAIL PROTECTED]> wrote: > > Craig McClanahan wrote: > > Using the following tag: > > > > <f:loadBundle var="messages" basename=" > com.mycompany.mypackage.MyBundle > > "/> > > > > exposes the contents of the named resource bundle as a Map in request > scope > > under the specified key. Now you can bind to it ... for example, to > create > > the localized label for the username field on a login screen, you might > say: > > > > <h:outputText value="#{messages['usename.prompt']}"/> > > > > where "username.prompt" is the message key. > > Yeah, I get that bit; that's what led me down the route of trying to > build the menu items in the JSP in the first place :-) The question is > how, if I should be building them in the backing bean, do I get the > localized label values there? > > I guess I can lookup the message bundle in the request (using the > equivealent of request.getAttribute("messages"), but then there's a > fragile dependency between the page and the bean on the key specified in > loadBundle.
So, the goal is build a localized list of select items, right? In the backing bean, you'd use the normal ResourceBundle APIs -- the only thing you need to know from the page is what locale to use. Let's do a simple case where you know the list of message keys needed to look up the descriptions, and you use the message keys themselves as the values (lots of other things are possible, of course -- this just makes the example simple): private String categoryKeys[] = { "category.all", "category.java", " category.music" }; public SelectItem[] getCategories() { // What locale are we using for this request? Locale locale = FacesContext.getCurrentInstance ().getViewRoot().getLocale(); // Look up the corresponding resource bundle ResourceBundle bundle = ResourceBundle.getBundle("com.mycompany.mypackage.MyBundle", locale); // Assemble an array of SelectItem instances SelectItem results[] = new SelectItem[categoryKeys.length]; for (int i = 0; i < categoryKeys.length; i++) { results[i] = new SelectItem(categoryKeys[i], bundle.getString (categoryKeys[i]); } // Return the localized set of category descriptions return results; } A more robust implementation would probably cache these arrays in a Map (keyed by Locale) the first time you created one, to avoid the processing cost of dynamically building the list every time. L. Craig