On 1/26/06, Richard Wallace <[EMAIL PROTECTED]> wrote:
>
>
> Ok.  I understand that's how you use it in the html files.  But what
> about in the clay-config.xml file?  For instance, in the use-cases
> clay-symbols-config.xml file there is a component definition like this:
>
>         <component jsfid="firstNameLabel" extends="baseLabel">
>                    <attributes>
>                           <set name="value" value="First Name:" />
>                           <set name="for"   value="firstName" />
>                    </attributes>
>         </component>
>
> What I'm wondering is, rather than using "First Name:" as the value, how
> would I load it from a resource bundle?  And does it just use the
> default locale or the locale the user sets for the session?


You can have your cake and eat it too :-), by combining two things:

* The LoadBundle utility class that Gary mentioned, configured as
  a managed bean, and

* The fact that you can use EL expressions for the value initializer.

Let's do a concrete example.  Assume I have a resource bundle named
com.mycompany.resources.Bundle that I want to pull localized strings from.
First, let's declare a managed bean in application scope (since the messages
are shared):

    <managed-bean>
        <managed-bean-name>messages</managed-bean-name>
        <managed-bean-class>org.apache.shale.util.LoadBundle
</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
        <managed-property>
            <property-name>basename</property-name>
            <value>com.mycompany.resources.Bundle</value>
        </managed-property>
    </managed-bean>

Now, modify your component definition from above slightly:

        <component jsfid="firstNameLabel" extends="baseLabel">
                   <attributes>
                          <set name="value" value="#{messages.map['
first.name.prompt']}" />
                          <set name="for"   value="firstName" />
                   </attributes>
        </component>

This works because the following events occur:

* The reference to "messages" will cause the managed bean to be
  created if its not there already

* The LoadBundle has a getMap() method that looks at FacesContext
  and figures out which Locale you're using, then creates a Map
  with the resource bundle contents for that locale

* The EL evaluation then looks up message key "first.name.prompt"
  from this resource bundle, and returns the corresponding value.

Craig

Reply via email to