Author: gvanmatre
Date: Fri Sep 16 19:37:18 2005
New Revision: 289688

URL: http://svn.apache.org/viewcvs?rev=289688&view=rev
Log:
Bug#: 35935 loadBundle component for clay HTML templates

Modified:
    struts/shale/trunk/clay-plugin/src/conf/view-config.xml
    
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/LoadBundle.java
    
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java
    
struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle.properties
    
struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle_de.properties
    struts/shale/trunk/use-cases/src/web/WEB-INF/clay-config.xml
    struts/shale/trunk/use-cases/src/web/rolodex/hrolodex.html
    struts/shale/trunk/use-cases/src/web/rolodex/rolodex.jsp

Modified: struts/shale/trunk/clay-plugin/src/conf/view-config.xml
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/conf/view-config.xml?rev=289688&r1=289687&r2=289688&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/conf/view-config.xml (original)
+++ struts/shale/trunk/clay-plugin/src/conf/view-config.xml Fri Sep 16 19:37:18 
2005
@@ -1154,7 +1154,6 @@
        allowBody="false">
     <attributes>
       <set name="basename" />
-      <set name="scope" value="request"/>
       <set name="var" value="msgs"/> 
     </attributes>
   </component> 

Modified: 
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/LoadBundle.java
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/LoadBundle.java?rev=289688&r1=289687&r2=289688&view=diff
==============================================================================
--- 
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/LoadBundle.java
 (original)
+++ 
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/LoadBundle.java
 Fri Sep 16 19:37:18 2005
@@ -1,216 +1,222 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * $Id$
- */
-
-package org.apache.shale.clay.component;
-
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.TreeMap;
-
-import javax.faces.component.UIComponentBase;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
-
-/**
- * <p>This component is meant to simulate the JSF loadBundle JSP tag for full 
- * [EMAIL PROTECTED] Clay} HTML views.  It adds a scope property not found in 
the JSF JSP RI Tag.  
- * This component is not immune to the rendered property like the JSP 
loadBundle tag.  
- * This means that if this component is nested in a component and the rendered 
attribute 
- * is false, the message bundle might not get loaded into the specified scope. 
 
- * </p>
- */
-public class LoadBundle extends UIComponentBase {
-
-    /**
-     * <p>Base bundle name of the target properties file.</p>
-     */
-    private String basename = null;
-    
-    /**
-     * <p>Key that the bundle will be loaded into session scope.</p>
-     */
-    private String var = null;
-    
-    /**
-     * <p>The scope the [EMAIL PROTECTED] 
org.apache.shale.clay.component.LoadBundle$BundleMap} 
-     * will be cached using the <code>var</code> as a key.  The default
-     * is "request" scope.</p>
-     */
-    private String scope = "request";
-    
-    
-    
-    /**
-     * <p>This component is not associated with a family.  
-     * Returns <code>null</code>.</p>
-     */
-    public String getFamily() {
-        return null;
-    }
-
-    /**
-     * <p>This component doesn't have a renderer and
-     * returns <code>null</code></p>
-     */
-    public String getRendererType() {
-       return null;
-    }
-
-    /**
-     *  <p>Resource bundle wrappered in a Map.</p>
-     */
-    private class BundleMap extends TreeMap {
-        
-        /**
-         * <p>Loads the resource bundle into a Map.</p> 
-         */
-        public BundleMap(ResourceBundle bundle) {
-           Enumeration ki = bundle.getKeys();
-           while (ki.hasMoreElements()) {
-               String key = (String) ki.nextElement();
-               String value = bundle.getString(key);
-               super.put(key, value);
-           }
-           
-        }
-
-        /**
-         * <p>Returns the message string for the key.  If the key doesn't
-         * exist, a friendly value "?key?" is returned for debuging.</p>
-         */
-        public Object get(Object key) {
-          
-            String value =  (String) super.get(key);
-            if (value == null) 
-               value = "?" + key + "?";
-            
-            return value;
-        }
-                 
-    };
-    
-    /**
-     * <p>Loads the resource bundle identified by the <code>basename</code>
-     * into <code>scope</code> using the <code>var</code> property as a 
key.</p>
-     */
-    public void encodeBegin(FacesContext context) throws IOException {
-        super.encodeBegin(context);
-          
-        StringBuffer targetExp = new StringBuffer();
-        targetExp.append("#{").append(getScope())
-                 .append("Scope").append("['")
-                 .append(getVar()).append("']}");
-        
-        ValueBinding vb = 
context.getApplication().createValueBinding(targetExp.toString());
-        
-        Map mapBundle = (Map) vb.getValue(context);
-        
-        if (mapBundle == null) {
-            Locale locale = context.getViewRoot().getLocale();
-            if (locale == null)
-               locale = context.getApplication().getDefaultLocale();
-            
-            ClassLoader classloader = 
Thread.currentThread().getContextClassLoader();
-            if(classloader == null)
-                classloader = this.getClass().getClassLoader();
-            
-            ResourceBundle bundle = ResourceBundle.getBundle(getBasename(), 
locale, classloader);
-            
-            mapBundle = new BundleMap(bundle);
-        }
-
-        vb.setValue(context, mapBundle);
-        
-    }
-
-    /**
-     * <p>Returns the name of the resource bundle.</p>
-     */
-    public String getBasename() {
-        return basename;
-    }
-    
-
-    /**
-     * <p>Sets the resource bundle name.</p>
-     */
-    public void setBasename(String basename) {
-        this.basename = basename;
-    }
-    
-
-    /**
-     * <p>Returns the key name the 
-     * [EMAIL PROTECTED] org.apache.shale.clay.component.LoadBundle$BundleMap} 
will be
-     * cached in <code>scope</code>.</p>
-     */
-    public String getVar() {
-        return var;
-    }
-    
-
-    /**
-     * <p>Sets the key name the 
-     * [EMAIL PROTECTED] org.apache.shale.clay.component.LoadBundle$BundleMap} 
will be
-     * cached in <code>scope</code>.</p>
-     */
-    public void setVar(String var) {
-        this.var = var;
-    }
-
-    /**
-     * <p>Returns the scope the 
-     * [EMAIL PROTECTED] org.apache.shale.clay.component.LoadBundle$BundleMap} 
will be cached.
-     * The valid enumerations are (request, session and application). 
-     * The default is "request" if a value is not specified.</p>
-     */
-    public String getScope() {
-        if (scope == null)
-          return "request";
-        else if (scope.equals("request") ||
-                 scope.equals("session") ||
-                 scope.equals("application")) {
-           return scope;
-        } else {
-           return "request";
-        }
-          
-    }
-    
-
-    /**
-    * <p>Sets the scope the 
-    * [EMAIL PROTECTED] org.apache.shale.clay.component.LoadBundle$BundleMap} 
will be cached.
-    * The valid enumerations are (request, session and application).
-    * </p>
-    */
-    public void setScope(String scope) {
-        this.scope = scope;
-    }
-
-    /**
-     * <p>Force the rendered property to <code>true</code>.</p>
-     */
-    public boolean isRendered() {    
-        return true;
-    }
-     
-}
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Id$
+ */
+
+package org.apache.shale.clay.component;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Set;
+
+import javax.faces.component.UIComponentBase;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+
+import org.apache.shale.faces.ShaleConstants;
+import org.apache.shale.util.Tags;
+
+/**
+ * Component counterpart of the standard loadBundle tag. Since it's a component
+ * it can be used with HTML templates.
+ */
+public class LoadBundle extends UIComponentBase {
+    /**
+     * Base name of the resource bundle to be loaded.
+     */
+    private String basename = null;
+
+    /**
+     * Name of a request scope attribute under which the resource bundle will 
be
+     * exposed as a Map.
+     */
+    private String var = null;
+
+    public String getFamily() {
+        return null;
+    }
+
+    /**
+     * Sets the base name of the resource bundle to be loaded.
+     */
+    public void setBasename(String basename) {
+        this.basename = basename;
+        if ((var != null) && (basename != null))
+            loadBundle();
+    }
+
+    /**
+     * Sets the name of a request scope attribute under which the resource
+     * bundle will be exposed as a Map.
+     */
+    public void setVar(String var) {
+        this.var = var;
+        if ((var != null) && (basename != null))
+            loadBundle();
+    }
+
+    /**
+     * Load the resource bundle and expose it in the request.
+     */
+    private void loadBundle() {
+        // get the current context
+        FacesContext context = FacesContext.getCurrentInstance();
+        if (context == null) {
+            throw new NullPointerException("No faces context!");
+        }
+
+        // get the ClassLoader
+        ClassLoader classLoader = Thread.currentThread()
+                .getContextClassLoader();
+        if (classLoader == null)
+            classLoader = getClass().getClassLoader();
+
+        // get the Tag Utilities
+        Tags tagUtils = (Tags) context.getApplication().getVariableResolver()
+                .resolveVariable(context, ShaleConstants.TAG_UTILITY_BEAN);
+
+        // evaluate any VB expression that we were passed
+        String resolvedBasename = (String) tagUtils.eval(basename);
+
+        if (null == resolvedBasename || null == var) {
+            throw new NullPointerException("null basename or var");
+        }
+
+        final ResourceBundle bundle = ResourceBundle.getBundle(basename,
+                context.getViewRoot().getLocale(), classLoader);
+        if (null == bundle) {
+            throw new NullPointerException("No ResourceBundle for " + 
basename);
+        }
+
+        context.getExternalContext().getRequestMap().put(var, new 
BundleMap(bundle));
+
+    }
+
+    public void encodeBegin(FacesContext context) throws IOException {
+        // ensure that this component is always transient
+        setTransient(true);
+
+        super.encodeBegin(context);
+    }
+
+    private static class BundleMap implements Map {
+        private ResourceBundle _bundle;
+
+        private List _values;
+
+        public BundleMap(ResourceBundle bundle) {
+            _bundle = bundle;
+        }
+
+        public Object get(Object key) {
+            try {
+                return _bundle.getObject(key.toString());
+            } catch (Exception e) {
+                return "???" + key + "???";
+            }
+        }
+
+        public boolean isEmpty() {
+            return !_bundle.getKeys().hasMoreElements();
+        }
+
+        public boolean containsKey(Object key) {
+            return _bundle.getObject(key.toString()) != null;
+        }
+
+        public Collection values() {
+            if (_values == null) {
+                _values = new ArrayList();
+                for (Enumeration enumer = _bundle.getKeys(); enumer
+                        .hasMoreElements();) {
+                    String v = _bundle.getString((String) 
enumer.nextElement());
+                    _values.add(v);
+                }
+            }
+            return _values;
+        }
+
+        public int size() {
+            return values().size();
+        }
+
+        public boolean containsValue(Object value) {
+            return values().contains(value);
+        }
+
+        public Set entrySet() {
+            Set set = new HashSet();
+            for (Enumeration enumer = _bundle.getKeys(); enumer
+                    .hasMoreElements();) {
+                final String k = (String) enumer.nextElement();
+                set.add(new Map.Entry() {
+                    public Object getKey() {
+                        return k;
+                    }
+
+                    public Object getValue() {
+                        return _bundle.getObject(k);
+                    }
+
+                    public Object setValue(Object value) {
+                        throw new UnsupportedOperationException(this.getClass()
+                                .getName()
+                                + " UnsupportedOperationException");
+                    }
+                });
+            }
+            return set;
+        }
+
+        public Set keySet() {
+            Set set = new HashSet();
+            for (Enumeration enumer = _bundle.getKeys(); enumer
+                    .hasMoreElements();) {
+                set.add(enumer.nextElement());
+            }
+            return set;
+        }
+
+        // Unsupported methods
+
+        public Object remove(Object key) {
+            throw new UnsupportedOperationException(this.getClass().getName()
+                    + " UnsupportedOperationException");
+        }
+
+        public void putAll(Map t) {
+            throw new UnsupportedOperationException(this.getClass().getName()
+                    + " UnsupportedOperationException");
+        }
+
+        public Object put(Object key, Object value) {
+            throw new UnsupportedOperationException(this.getClass().getName()
+                    + " UnsupportedOperationException");
+        }
+
+        public void clear() {
+            throw new UnsupportedOperationException(this.getClass().getName()
+                    + " UnsupportedOperationException");
+        }
+
+    }
+}

Modified: 
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java?rev=289688&r1=289687&r2=289688&view=diff
==============================================================================
--- 
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java
 (original)
+++ 
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java
 Fri Sep 16 19:37:18 2005
@@ -122,5 +122,6 @@
         
         isWatchDogOn = true;
     }
+
     
 }

Modified: 
struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle.properties
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle.properties?rev=289688&r1=289687&r2=289688&view=diff
==============================================================================
--- 
struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle.properties
 (original)
+++ 
struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle.properties
 Fri Sep 16 19:37:18 2005
@@ -147,3 +147,21 @@
 tiles.test.thank.you.title=Thank You
 tiles.test.payment.heading=Please enter your payment information
 tiles.test.payment.thank.you.heading=Thank you for your payment!
+
+# Rolodex
+rolodex.contactTable.nameColumn.title=Contacts
+rolodex.address.street1=Street 1:
+rolodex.address.street2=Street 2:
+rolodex.address.city=City:
+rolodex.address.state=State:
+rolodex.address.zip=Zip:
+rolodex.address.phone=Phone:
+rolodex.address.province=Province:
+rolodex.address.country=Country:
+rolodex.address.residentialAddress=Residential Address
+rolodex.address.businessAddress=Business Address
+rolodex.name=Name:
+rolodex.email=Email
+rolodex.button.new=New Contact
+rolodex.button.save=Save Contact
+rolodex.button.delete=Delete Contact

Modified: 
struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle_de.properties
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle_de.properties?rev=289688&r1=289687&r2=289688&view=diff
==============================================================================
--- 
struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle_de.properties
 (original)
+++ 
struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle_de.properties
 Fri Sep 16 19:37:18 2005
@@ -84,3 +84,21 @@
 validate.test.unknown.credit.card.type=Unknown Credit Card Type
 validate.test.bad.expiration.date=Bad Expiration Date. Enter the date in this 
format: mm/dd/yyyy
 validate.test.description=This form has six validators, all implemented with 
s:commonsValidator:<p><ul><li>Amount: <strong>floatRange</strong> 
(server)<li>Credit Card Number: <strong>required</strong> (server) 
<strong>mask</strong> ([4-6].*) (client) and <strong>creditCard</strong> 
(server)<li>Expiration Date: <strong>required</strong> (client) 
<strong>date</strong> (server)</ul><p>Note: because of the Credit Card Number 
field's mix of client- and server-side validators, entering "33" in the field 
results in a JavaScript alert (because the mask validator catches it), but 
entering "55" results in server-side validation and a subsequent error message 
displayed in the form.<p>See the Apache Commons Validator documentation for 
more information about other available validators.
+
+# Rolodex
+rolodex.contactTable.nameColumn.title=Kontakte
+rolodex.address.street1=Straße 1:
+rolodex.address.street2=Straße 2:
+rolodex.address.city=Ort:
+rolodex.address.state=Bundesstaat:
+rolodex.address.zip=Plz:
+rolodex.address.phone=Telefon:
+rolodex.address.province=Provinz:
+rolodex.address.country=Land:
+rolodex.address.residentialAddress=Privatadresse
+rolodex.address.businessAddress=Geschäftsadresse
+rolodex.name=Name:
+rolodex.email=E-Mail
+rolodex.button.new=Neuer Kontakt
+rolodex.button.save=Kontakt speichern
+rolodex.button.delete=Kontakt löschen

Modified: struts/shale/trunk/use-cases/src/web/WEB-INF/clay-config.xml
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/use-cases/src/web/WEB-INF/clay-config.xml?rev=289688&r1=289687&r2=289688&view=diff
==============================================================================
--- struts/shale/trunk/use-cases/src/web/WEB-INF/clay-config.xml (original)
+++ struts/shale/trunk/use-cases/src/web/WEB-INF/clay-config.xml Fri Sep 16 
19:37:18 2005
@@ -24,7 +24,7 @@
   <component jsfid="nameColumn" extends="column" id="name">
     <element renderId="1" jsfid="outputText" facetName="header">
       <attributes>
-        <set name="value" value="Contacts" />
+        <set name="value" 
value="#{messages['rolodex.contactTable.nameColumn.title']}" />
       </attributes>
     </element> 
        
@@ -74,7 +74,7 @@
        
        <component jsfid="cityLabel" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="City:" />            
+                         <set name="value" 
value="#{messages['rolodex.address.city']}" />              
                          <set name="for"   value="city" />
                   </attributes>
        </component>                            
@@ -95,7 +95,7 @@
        <!-- province label, input field and message -->        
        <component jsfid="provinceLabel" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="Province:" />                
+                         <set name="value" 
value="#{messages['rolodex.address.province']}" />
                          <set name="for"   value="province" />
                   </attributes>
        </component>                            
@@ -116,7 +116,7 @@
        <!-- state label, input field and message -->   
        <component jsfid="stateLabel" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="State:" />           
+                         <set name="value" 
value="#{messages['rolodex.address.state']}" />             
                          <set name="for"   value="state" />
                   </attributes>
        </component>                            
@@ -143,7 +143,7 @@
        <!-- country label, input field and message --> 
        <component jsfid="countryLabel" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="Country:" />         
+                         <set name="value" 
value="#{messages['rolodex.address.country']}" />
                          <set name="for"   value="country" />
                   </attributes>
        </component>                            
@@ -170,7 +170,7 @@
        <!-- zip code label, input field and message -->
        <component jsfid="zipLabel" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="Zip:" />             
+                         <set name="value" 
value="#{messages['rolodex.address.zip']}" />
                          <set name="for"   value="zip" />
                   </attributes>
        </component>                                    
@@ -200,7 +200,7 @@
        <!-- street 1 label, input field and message -->
        <component jsfid="street1Label" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="Street 1:" />                
+                         <set name="value" 
value="#{messages['rolodex.address.street1']}" />
                          <set name="for"   value="street1" />
                   </attributes>
        </component>                            
@@ -219,7 +219,7 @@
        <!-- street 2 label, input field and message -->
        <component jsfid="street2Label" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="Street 2:" />                
+                         <set name="value" 
value="#{messages['rolodex.address.street2']}" />
                          <set name="for"   value="street2" />
                   </attributes>
        </component>                            
@@ -245,7 +245,7 @@
     <!-- submit button to save a contact -->
     <component jsfid="saveCommand" extends="baseCommand"> 
           <attributes>
-             <set name="value" value="Save Contact" />         
+             <set name="value" value="#{messages['rolodex.button.save']}" />   
        
                  <set name="action" value="#{managed-bean-name.saveContact}"  
/>       
           </attributes>
     </component>
@@ -253,7 +253,7 @@
     <!-- submit button to delete a contact -->
     <component jsfid="deleteCommand" extends="baseCommand"> 
           <attributes>
-             <set name="value" value="Delete Contact" />               
+             <set name="value" value="#{messages['rolodex.button.delete']}" /> 
        
                  <set name="action" value="#{managed-bean-name.deleteContact}" 
 />     
           </attributes>
     </component>
@@ -263,7 +263,7 @@
     <!-- Contact Name -->
        <component jsfid="nameLabel" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="Name:" />            
+                         <set name="value" value="#{messages['rolodex.name']}" 
/>              
                          <set name="for"   value="name" />
                   </attributes>
        </component>                            
@@ -284,7 +284,7 @@
     <!-- Contact email address -->
        <component jsfid="emailLabel" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="Email:" />           
+                         <set name="value" 
value="#{messages['rolodex.email']}" />
                          <set name="for"   value="email" />
                   </attributes>
        </component>                            
@@ -305,7 +305,7 @@
     <!-- Contact residential Phone -->
        <component jsfid="residentialPhoneLabel" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="Phone:" />           
+                         <set name="value" 
value="#{messages['rolodex.address.phone']}" />
                          <set name="for"   value="residentialPhone" />
                   </attributes>
        </component>                            
@@ -324,7 +324,7 @@
     <!-- Contact business Phone -->
        <component jsfid="businessPhoneLabel" extends="baseLabel"> 
                   <attributes>
-                         <set name="value" value="Phone:" />           
+                         <set name="value" 
value="#{messages['rolodex.address.phone']}" />             
                          <set name="for"   value="businessPhone" />
                   </attributes>
        </component>                            
@@ -431,7 +431,7 @@
 
                <element renderId="0" jsfid="baseCommand"> 
              <attributes>
-                <set name="value" value="New Contact" />               
+                <set name="value" value="#{messages['rolodex.button.new']}" /> 
        
                     <set name="action" value="#{managed-bean-name.newContact}" 
 />     
              <set name="immediate" value="true"/>    
              </attributes>
@@ -452,7 +452,19 @@
     </component>
 
 
-<!--  HTML hroledex.html template -->
+<!--  HTML hrolodex.html template -->
+       <component jsfid="residentialAddressHeader" extends="outputText" 
allowBody="false">
+          <attributes>
+             <set name="value" 
value="#{messages['rolodex.address.residentialAddress']}" />
+          </attributes>
+    </component>
+
+       <component jsfid="businessAddressHeader" extends="outputText" 
allowBody="false">
+          <attributes>
+             <set name="value" 
value="#{messages['rolodex.address.businessAddress']}" />
+          </attributes>
+    </component>
+
 
     <!-- Nested Clay Component -->    
        <component jsfid="tabs" extends="clay" id="tabs" allowBody="false">
@@ -468,6 +480,7 @@
           <attributes>
                  <set name="action" value="#{managed-bean-name.saveContact}"/> 
           <set name="rendered" useValueLateBinding="true" value="#{!empty 
managed-bean-name.selectedContact}"/>
+             <set name="value" value="#{messages['rolodex.button.save']}" />
           </attributes>
     </component>
 
@@ -476,6 +489,7 @@
           <attributes>
                  <set name="action" 
value="#{managed-bean-name.deleteContact}"/>
           <set name="rendered" useValueLateBinding="true" value="#{!empty 
managed-bean-name.selectedContact}"/>        
+             <set name="value" value="#{messages['rolodex.button.delete']}" />
           </attributes>
     </component>
 
@@ -484,14 +498,16 @@
           <attributes>
                  <set name="action" value="#{managed-bean-name.newContact}"  
/>        
           <set name="immediate" value="true"/>    
+             <set name="value" value="#{messages['rolodex.button.new']}" />
           </attributes>
     </component>
 
 
     <!-- Contact Name -->
-       <component jsfid="contactNameLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="contactNameLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="contactName" />
+                     <set name="value" value="#{messages['rolodex.name']}" />
                   </attributes>
        </component>                            
        <component jsfid="contactName" extends="inputText" id="contactName"> 
@@ -507,9 +523,10 @@
        </component>
 
     <!-- Contact email address -->
-       <component jsfid="contactEmailLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="contactEmailLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="contactEmail" />
+                     <set name="value" value="#{messages['rolodex.email']}" />
                   </attributes>
        </component>                            
        <component jsfid="contactEmail" extends="inputText" id="contactEmail"> 
@@ -525,9 +542,10 @@
        </component>
 
        <!-- residential city -->
-       <component jsfid="residentialCityLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="residentialCityLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="residentialCity" />
+                     <set name="value" 
value="#{messages['rolodex.address.city']}" />
                   </attributes>
        </component>                            
        <component jsfid="residentialCity" extends="inputText" 
id="residentialCity"> 
@@ -544,9 +562,10 @@
 
 
        <!-- business city -->
-       <component jsfid="businessCityLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="businessCityLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="businessCity" />
+                     <set name="value" 
value="#{messages['rolodex.address.city']}" />
                   </attributes>
        </component>                            
        <component jsfid="businessCity" extends="inputText" id="businessCity"> 
@@ -563,9 +582,10 @@
 
 
        <!-- residential street 1 label, input field and message -->
-       <component jsfid="residentialStreet1Label" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="residentialStreet1Label" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="residentialStreet1" />
+                     <set name="value" 
value="#{messages['rolodex.address.street1']}" />
                   </attributes>
        </component>                            
        <component jsfid="residentialStreet1" extends="inputText" 
id="residentialStreet1"> 
@@ -581,9 +601,10 @@
        </component>
 
        <!-- business street 1 label, input field and message -->
-       <component jsfid="businessStreet1Label" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="businessStreet1Label" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="businessStreet1" />
+                     <set name="value" 
value="#{messages['rolodex.address.street1']}" />
                   </attributes>
        </component>                            
        <component jsfid="businessStreet1" extends="inputText" 
id="businessStreet1"> 
@@ -600,9 +621,10 @@
 
 
        <!-- residential street 2 label, input field and message -->
-       <component jsfid="residentialStreet2Label" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="residentialStreet2Label" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="residentialStreet2" />
+                     <set name="value" 
value="#{messages['rolodex.address.street2']}" />
                   </attributes>
        </component>                            
        <component jsfid="residentialStreet2" extends="inputText" 
id="residentialStreet2"> 
@@ -618,9 +640,10 @@
        </component>
 
        <!-- business street 2 label, input field and message -->
-       <component jsfid="businessStreet2Label" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="businessStreet2Label" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="businessStreet2" />
+                     <set name="value" 
value="#{messages['rolodex.address.street2']}" />
                   </attributes>
        </component>                            
        <component jsfid="businessStreet2" extends="inputText" 
id="businessStreet2"> 
@@ -637,9 +660,10 @@
 
 
        <!-- residential state label, input field and message -->       
-       <component jsfid="residentialStateLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="residentialStateLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="residentialState" />
+                     <set name="value" 
value="#{messages['rolodex.address.state']}" />
                   </attributes>
        </component>                            
        <component jsfid="residentialState" extends="selectOneMenu" 
id="residentialState" allowBody="false"> 
@@ -662,9 +686,10 @@
 
 
        <!-- business state label, input field and message -->  
-       <component jsfid="businessStateLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="businessStateLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="businessState" />
+                     <set name="value" 
value="#{messages['rolodex.address.state']}" />
                   </attributes>
        </component>                            
        <component jsfid="businessState" extends="selectOneMenu" 
id="businessState" allowBody="false"> 
@@ -687,9 +712,10 @@
 
 
        <!-- residential zip code label, input field and message -->
-       <component jsfid="residentialZipLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="residentialZipLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="residentialZip" />
+                     <set name="value" 
value="#{messages['rolodex.address.zip']}" />
                   </attributes>
        </component>                                    
        <component jsfid="residentialZip" id="residentialZip" 
extends="inputText"> 
@@ -705,9 +731,10 @@
        </component>
 
        <!-- business zip code label, input field and message -->
-       <component jsfid="businessZipLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="businessZipLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="businessZip" />
+                     <set name="value" 
value="#{messages['rolodex.address.zip']}" />
                   </attributes>
        </component>                                    
        <component jsfid="businessZip" id="businessZip" extends="inputText"> 
@@ -725,9 +752,10 @@
 
 
    <!-- Contact residential Phone -->
-       <component jsfid="contactResidentialPhoneLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="contactResidentialPhoneLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="contactResidentialPhone" />
+                     <set name="value" 
value="#{messages['rolodex.address.phone']}" />
                   </attributes>
        </component>                            
        <component jsfid="contactResidentialPhone" extends="inputText" 
id="contactResidentialPhone"> 
@@ -743,9 +771,10 @@
        </component>
 
    <!-- Contact business Phone -->
-       <component jsfid="contactBusinessPhoneLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="contactBusinessPhoneLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="contactBusinessPhone" />
+                     <set name="value" 
value="#{messages['rolodex.address.phone']}" />
                   </attributes>
        </component>                            
        <component jsfid="contactBusinessPhone" extends="inputText" 
id="contactBusinessPhone"> 
@@ -762,9 +791,10 @@
 
 
        <!-- business province label, input field and message -->       
-       <component jsfid="businessProvinceLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="businessProvinceLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="businessProvince" />
+                     <set name="value" 
value="#{messages['rolodex.address.province']}" />
                   </attributes>
        </component>                            
        <component jsfid="businessProvince" extends="inputText" 
id="businessProvince"> 
@@ -781,9 +811,10 @@
 
 
        <!-- business country label, input field and message -->        
-       <component jsfid="businessCountryLabel" extends="outputLabel" 
allowBody="true"> 
+       <component jsfid="businessCountryLabel" extends="outputLabel" 
allowBody="false"> 
                   <attributes>
                          <set name="for"   value="businessCountry" />
+                     <set name="value" 
value="#{messages['rolodex.address.country']}" />
                   </attributes>
        </component>                            
        <component jsfid="businessCountry" extends="selectOneMenu" 
id="businessCountry" allowBody="false"> 

Modified: struts/shale/trunk/use-cases/src/web/rolodex/hrolodex.html
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/use-cases/src/web/rolodex/hrolodex.html?rev=289688&r1=289687&r2=289688&view=diff
==============================================================================
--- struts/shale/trunk/use-cases/src/web/rolodex/hrolodex.html (original)
+++ struts/shale/trunk/use-cases/src/web/rolodex/hrolodex.html Fri Sep 16 
19:37:18 2005
@@ -1,7 +1,7 @@
 <html>
 <head>
-<span jsfid="loadBundle" basename="org.apache.shale.usecases.view.Bundle" 
scope="session"/>
-<title>#{msgs['usecases.rolodex2']}</title>
+<span jsfid="loadBundle" basename="org.apache.shale.usecases.view.Bundle" 
var="messages"/>
+<title>#{messages['usecases.rolodex2']}</title>
 
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 <style type="text/css" media="screen">
@@ -98,7 +98,7 @@
 }
 
 input.button {
-    width: 1in; 
+    width: 1.2in; 
     text-align: center; 
     color: #99CC66; 
     font-size: 12px; 
@@ -157,16 +157,16 @@
         </table>
      </td>
      <td>             
-        <input styleClass="button" class="button" class="button" type="submit" 
value="Save Contact" jsfid="contactSaveCommand"><br>
-        <input styleClass="button" class="button" type="submit" value="Delete 
Contact" jsfid="contactDeleteCommand"><br>
-        <input styleClass="button" class="button" type="submit" value="New 
Contact" jsfid="contactNewCommand"><br>     
+        <input styleClass="button" class="button" class="button" type="submit" 
jsfid="contactSaveCommand"><br>
+        <input styleClass="button" class="button" type="submit" 
jsfid="contactDeleteCommand"><br>
+        <input styleClass="button" class="button" type="submit" 
jsfid="contactNewCommand"><br>     
      </td>
     </tr>
     <tr>
      <td>
         <table border=0>
            <tr class="contactsHeader">
-              <td colspan="3">Residential Address:</td>
+              <td colspan="3"><span 
jsfid="residentialAddressHeader">Residential Address:</span></td>
            </tr>
            <tr>
                 <td><label style="color:#99CC66"  
jsfid=residentialStreet1Label>Address 1:</label></td>
@@ -213,7 +213,7 @@
      <td>
         <table border=0>
            <tr class="contactsHeader">
-              <td colspan="3">Business Address:</td>
+              <td colspan="3"><span jsfid="businessAddressHeader">Business 
Address:</span></td>
            </tr>
            <tr>
                 <td><label style="color:#99CC66" 
jsfid=businessStreet1Label>Address 1:</label></td>

Modified: struts/shale/trunk/use-cases/src/web/rolodex/rolodex.jsp
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/use-cases/src/web/rolodex/rolodex.jsp?rev=289688&r1=289687&r2=289688&view=diff
==============================================================================
--- struts/shale/trunk/use-cases/src/web/rolodex/rolodex.jsp (original)
+++ struts/shale/trunk/use-cases/src/web/rolodex/rolodex.jsp Fri Sep 16 
19:37:18 2005
@@ -8,7 +8,7 @@
 <head>
 <title>Rolodex Example Using Clay</title>
 
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <style type="text/css" media="screen">
 body {
        margin : 10px;
@@ -103,7 +103,7 @@
 }
 
 input.button {
-    width: 1in; 
+    width: 1.2in; 
     text-align: center; 
     color: #99CC66; 
     font-size: 12px; 
@@ -117,6 +117,7 @@
 </head>
 
 <f:view>
+<[EMAIL PROTECTED] file="../messages.jspf"%>
        <body class="section-1">
 
        <h:form>
@@ -138,8 +139,8 @@
                                        
managedBeanName="rolodex.selectedContact" />
                                <clay:clay id="commandPanel" 
jsfid="commandPanel"
                                        managedBeanName="rolodex" />
-                               <h:outputText value="Residential Address:" 
style="color:#66B9CC"/>
-                               <h:outputText value="Business Address:" 
style="color:#66B9CC"/>
+                               <h:outputText 
value="#{messages['rolodex.address.residentialAddress']}" 
style="color:#66B9CC"/>
+                               <h:outputText 
value="#{messages['rolodex.address.businessAddress']}" style="color:#66B9CC"/>
                                <!-- clay:clay id="address1" 
jsfid="addressPanel"
                                        
managedBeanName="rolodex.selectedContact.residentialAddress" / -->
                                <clay:clay id="address1" 
jsfid="rolodex/address.html"



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to