craigmcc    01/02/19 17:48:47

  Modified:    src/doc  struts-html.xml
               src/share/org/apache/struts/taglib/bean MessageTag.java
               src/share/org/apache/struts/taglib/html ErrorsTag.java
                        ImgTag.java OptionTag.java
               src/share/org/apache/struts/util LocalStrings.properties
                        RequestUtils.java
  Log:
  Add "bundle", "key", and "locale" attributes to the <html:option> tag so
  that you can specify an internationalized value to display to the user,
  without having to resort to a nested <bean:message> tag, although the
  latter approach is still supported.  This can reduce the total number of
  custom tags on a JSP page when you use large numbers of <html:option>
  tags.
  
  Refactor the lookup of messages based on "bundle", "locale", and "key"
  type attributes into a support method named RequestUtils.message(), to
  centralize this functionality and reduce the amount of repetitive code
  found in tag implementation classes.  Modify <bean:message>,
  <html:errors>, <html:img>, and <html:option> to use the new utility
  method.
  
  Submitted by: Martin Cooper <[EMAIL PROTECTED]>
  
  Revision  Changes    Path
  1.13      +68 -16    jakarta-struts/src/doc/struts-html.xml
  
  Index: struts-html.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/doc/struts-html.xml,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- struts-html.xml   2001/02/20 00:18:48     1.12
  +++ struts-html.xml   2001/02/20 01:48:44     1.13
  @@ -715,6 +715,17 @@
                   </attribute> 
   
                   <attribute>
  +                    <name>locale</name>
  +                    <required>false</required>
  +                    <rtexprvalue>true</rtexprvalue>
  +                    <info>
  +                    The session attribute key for the Locale used to select
  +                    messages to be displayed.  If not specified, defaults to
  +                    the Struts standard value.
  +                    </info>
  +                </attribute>
  +
  +                <attribute>
                     <name>name</name>
                     <required>false</required>
                     <rtexprvalue>true</rtexprvalue>
  @@ -2493,31 +2504,72 @@
                
                <name>option</name>
                <summary>
  -                     Render A Select Option
  +                Render A Select Option
                </summary>
                <tagclass>org.apache.struts.taglib.html.OptionTag</tagclass>
                <info>
  -                     <p>
  -                             Renders an HTML &lt;option&gt; element, representing 
one of the choices
  -                             for a &lt;select&gt; element. The text displayed to 
the user comes from
  -                             the body of this tag. If the value of the 
corresponding bean
  -                             property matches the specified value, this option will 
be marked
  -                             selected. This tag is only valid when nested inside a 
select tag
  -                             body.
  -                     </p>
  +                <p>Render an HTML <code>&lt;option&gt;</code> element,
  +                representing one of the choices for an enclosing
  +                <code>&lt;select&gt;</code> element.  The text displayed to the
  +                user comes from either the body of this tag, or from a message
  +                string looked up based on the <code>bundle</code>,
  +                <code>locale</code>, and <code>key</code> attributes.</p>
  +
  +                <p>If the value of the corresponding bean property matches the
  +                specified value, this option will be marked selected.  This tag
  +                is only valid when nested inside a
  +                <code>&lt;html:select&gt;</code> tag body.</p>
                </info>
                
  +                <attribute>
  +                    <name>bundle</name>
  +                    <required>false</required>
  +                    <rtexprvalue>true</rtexprvalue>
  +                    <info>
  +                    The servlet context attributes key for the MessageResources
  +                    instance to use.  If not specified, defaults to the
  +                    application resources configured for our action servlet.
  +                    </info>
  +                </attribute>
  +
  +                <attribute>
  +                    <name>key</name>
  +                    <required>false</required>
  +                    <rtexprvalue>true</rtexprvalue>
  +                    <info>
  +                    If specified, defines the message key to be looked up in
  +                    the resource bundle specified by <code>bundle</code> for
  +                    the text displayed to the user for this option.  If not
  +                    specified, the text to be displayed is taken from the body
  +                    content of this tag.
  +                    </info>
  +                </attribute>
  +
  +                <attribute>
  +                    <name>locale</name>
  +                    <required>false</required>
  +                    <rtexprvalue>true</rtexprvalue>
  +                    <info>
  +                    The session attributes key for the Locale instance to use
  +                    for looking up the message specified by the
  +                    <code>key</code> attribute.  If not specified, uses the
  +                    standard Struts session attribute name.
  +                    </info>
  +                </attribute>
  +
                <attribute>
  -                     <name>value</name>
  -                     <required>true</required>
  -                     <rtexprvalue>true</rtexprvalue>
  -                     <info>
  -                             Value to be submitted for this field if this option is 
selected by
  -                             the user. 
  -                     </info>
  +                    <name>value</name>
  +                    <required>true</required>
  +                    <rtexprvalue>true</rtexprvalue>
  +                    <info>
  +                    Value to be submitted for this field if this option is
  +                    selected by the uuser.
  +                    </info>
                </attribute>
  +
        </tag>
        
  +
        <tag>
                
                <name>options</name>
  
  
  
  1.4       +6 -26     
jakarta-struts/src/share/org/apache/struts/taglib/bean/MessageTag.java
  
  Index: MessageTag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/MessageTag.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- MessageTag.java   2001/02/12 01:26:57     1.3
  +++ MessageTag.java   2001/02/20 01:48:45     1.4
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/MessageTag.java,v 1.3 
2001/02/12 01:26:57 craigmcc Exp $
  - * $Revision: 1.3 $
  - * $Date: 2001/02/12 01:26:57 $
  + * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/MessageTag.java,v 1.4 
2001/02/20 01:48:45 craigmcc Exp $
  + * $Revision: 1.4 $
  + * $Date: 2001/02/20 01:48:45 $
    *
    * ====================================================================
    *
  @@ -82,7 +82,7 @@
    * <code>ActionServlet</code> implementation.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.3 $ $Date: 2001/02/12 01:26:57 $
  + * @version $Revision: 1.4 $ $Date: 2001/02/20 01:48:45 $
    */
   
   public class MessageTag extends TagSupport {
  @@ -227,27 +227,6 @@
        */
       public int doStartTag() throws JspException {
   
  -     // Acquire the resources object containing our messages
  -     MessageResources resources = (MessageResources)
  -         pageContext.getAttribute(bundle, PageContext.APPLICATION_SCOPE);
  -     if (resources == null) {
  -            JspException e = new JspException
  -             (messages.getMessage("message.resources", bundle));
  -            RequestUtils.saveException(pageContext, e);
  -            throw e;
  -        }
  -
  -     // Calculate the Locale we will be using
  -     Locale locale = null;
  -     try {
  -         locale = (Locale)
  -             pageContext.getAttribute(localeKey, PageContext.SESSION_SCOPE);
  -     } catch (IllegalStateException e) {     // Invalidated session
  -         locale = null;
  -     }
  -     if (locale == null)
  -         locale = defaultLocale;
  -
        // Construct the optional arguments array we will be using
        Object args[] = new Object[5];
        args[0] = arg0;
  @@ -257,7 +236,8 @@
        args[4] = arg4;
   
        // Retrieve the message string we are looking for
  -     String message = resources.getMessage(locale, key, args);
  +     String message = RequestUtils.message(pageContext, this.bundle,
  +                                              this.localeKey, this.key, args);
        if (message == null) {
            JspException e = new JspException
                (messages.getMessage("message.message", key));
  
  
  
  1.6       +33 -42    
jakarta-struts/src/share/org/apache/struts/taglib/html/ErrorsTag.java
  
  Index: ErrorsTag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/ErrorsTag.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ErrorsTag.java    2001/02/13 17:30:00     1.5
  +++ ErrorsTag.java    2001/02/20 01:48:46     1.6
  @@ -1,13 +1,13 @@
   /*
  - * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/ErrorsTag.java,v 1.5 
2001/02/13 17:30:00 craigmcc Exp $
  - * $Revision: 1.5 $
  - * $Date: 2001/02/13 17:30:00 $
  + * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/ErrorsTag.java,v 1.6 
2001/02/20 01:48:46 craigmcc Exp $
  + * $Revision: 1.6 $
  + * $Date: 2001/02/20 01:48:46 $
    *
    * ====================================================================
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999 The Apache Software Foundation.  All rights
  + * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -29,7 +29,7 @@
    *    Alternately, this acknowlegement may appear in the software itself,
    *    if and wherever such third-party acknowlegements normally appear.
    *
  - * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
  + * 4. The names "The Jakarta Project", "Struts", and "Apache Software
    *    Foundation" must not be used to endorse or promote products derived
    *    from this software without prior written permission. For written
    *    permission, please contact [EMAIL PROTECTED]
  @@ -76,6 +76,8 @@
   import org.apache.struts.util.BeanUtils;
   import org.apache.struts.util.ErrorMessages;
   import org.apache.struts.util.MessageResources;
  +import org.apache.struts.util.RequestUtils;
  +import org.apache.struts.util.ResponseUtils;
   
   
   /**
  @@ -96,7 +98,7 @@
    * </ul>
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.5 $ $Date: 2001/02/13 17:30:00 $
  + * @version $Revision: 1.6 $ $Date: 2001/02/20 01:48:46 $
    */
   
   public class ErrorsTag extends TagSupport {
  @@ -126,9 +128,22 @@
   
   
       /**
  -     * Name of the request scope attribute containing our error messages,
  -     * if any.
  +     * The session attribute key for our locale.
        */
  +    protected String locale = Action.LOCALE_KEY;
  +
  +    public String getLocale() {
  +        return (this.locale);
  +    }
  +
  +    public void setLocale(String locale) {
  +        this.locale = locale;
  +    }
  +
  +
  +    /**
  +     * The request attribute key for our error messages (if any).
  +     */
       protected String name = Action.ERROR_KEY;
   
       public String getName() {
  @@ -197,25 +212,10 @@
           if (errors.empty())
            return (EVAL_BODY_INCLUDE);
   
  -     // Render the error messages appropriately
  -     Locale locale = null;
  -     try {
  -         locale = (Locale) pageContext.getAttribute
  -             (Action.LOCALE_KEY, PageContext.SESSION_SCOPE);
  -     } catch (IllegalStateException e) {     // Invalidated session
  -         locale = null;
  -     }
  -     if (locale == null)
  -         locale = defaultLocale;
  -     MessageResources messages = (MessageResources)
  -       pageContext.getAttribute(bundle,
  -                                PageContext.APPLICATION_SCOPE);
  -     String message = null;
  +        // Render the error messages appropriately
        StringBuffer results = new StringBuffer();
  -        if (messages != null)
  -            message = messages.getMessage(locale, "errors.header");
  -        else
  -            message = "MISSING APPLICATION RESOURCES";
  +        String message = RequestUtils.message(pageContext, bundle,
  +                                              locale, "errors.header");
        if (message != null) {
            results.append(message);
            results.append("\r\n");
  @@ -227,33 +227,23 @@
               reports = errors.get(property);
           while (reports.hasNext()) {
               ActionError report = (ActionError) reports.next();
  -            if (messages != null)
  -                message =
  -                    messages.getMessage(locale,
  -                                        report.getKey(), report.getValues());
  -            else
  -                message = null;
  +            message = RequestUtils.message(pageContext, bundle,
  +                                           locale, report.getKey(),
  +                                           report.getValues());
            if (message != null) {
                results.append(message);
                results.append("\r\n");
            }
        }
  -        if (messages != null)
  -            message = messages.getMessage(locale, "errors.footer");
  -        else
  -            message = null;
  +        message = RequestUtils.message(pageContext, bundle,
  +                                       locale, "errors.footer");
        if (message != null) {
            results.append(message);
            results.append("\r\n");
        }
   
        // Print the results to our output writer
  -     JspWriter writer = pageContext.getOut();
  -     try {
  -         writer.print(results.toString());
  -     } catch (IOException e) {
  -         throw new JspException(e.toString());
  -     }
  +        ResponseUtils.write(pageContext, results.toString());
   
        // Continue processing this page
        return (EVAL_BODY_INCLUDE);
  @@ -268,6 +258,7 @@
   
        super.release();
           bundle = Action.MESSAGES_KEY;
  +        locale = Action.LOCALE_KEY;
        name = Action.ERROR_KEY;
           property = null;
   
  
  
  
  1.6       +8 -43     
jakarta-struts/src/share/org/apache/struts/taglib/html/ImgTag.java
  
  Index: ImgTag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/ImgTag.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ImgTag.java       2001/02/20 00:18:52     1.5
  +++ ImgTag.java       2001/02/20 01:48:46     1.6
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/ImgTag.java,v 1.5 
2001/02/20 00:18:52 craigmcc Exp $
  - * $Revision: 1.5 $
  - * $Date: 2001/02/20 00:18:52 $
  + * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/ImgTag.java,v 1.6 
2001/02/20 01:48:46 craigmcc Exp $
  + * $Revision: 1.6 $
  + * $Date: 2001/02/20 01:48:46 $
    *
    * ====================================================================
    *
  @@ -96,7 +96,7 @@
    *
    * @author Michael Westbay
    * @author Craig McClanahan
  - * @version $Revision: 1.5 $
  + * @version $Revision: 1.6 $
    */
   
   public class ImgTag extends BaseHandlerTag {
  @@ -703,26 +703,9 @@
               }
               HttpServletRequest request =
                   (HttpServletRequest) pageContext.getRequest();
  -            MessageResources resources = (MessageResources)
  -                pageContext.getAttribute(this.bundle,
  -                                         PageContext.APPLICATION_SCOPE);
  -            if (resources == null) {
  -                JspException e = new JspException
  -                    (messages.getMessage("imgTag.bundle", this.bundle));
  -                RequestUtils.saveException(pageContext, e);
  -            }
  -            Locale locale = null;
  -            try {
  -                locale = (Locale)
  -                    pageContext.getAttribute(this.locale,
  -                                             PageContext.SESSION_SCOPE);
  -            } catch (IllegalStateException e) {
  -                locale = null; // Invalidated session
  -            }
  -            if (locale == null)
  -                locale = defaultLocale;
               return (request.getContextPath() +
  -                    resources.getMessage(locale, this.pageKey));
  +                    RequestUtils.message(pageContext, bundle,
  +                                         locale, this.pageKey));
           }
   
           // Deal with an absolute source that has been specified
  @@ -742,27 +725,9 @@
                   (messages.getMessage("imgTag.src"));
               RequestUtils.saveException(pageContext, e);
               throw e;
  -        }
  -        MessageResources resources = (MessageResources)
  -            pageContext.getAttribute(this.bundle,
  -                                     PageContext.APPLICATION_SCOPE);
  -        if (resources == null) {
  -            JspException e = new JspException
  -                (messages.getMessage("imgTag.bundle", this.bundle));
  -            RequestUtils.saveException(pageContext, e);
  -            throw e;
           }
  -        Locale locale = null;
  -        try {
  -            locale = (Locale)
  -                pageContext.getAttribute(this.locale,
  -                                         PageContext.SESSION_SCOPE);
  -        } catch (IllegalStateException e) {
  -            locale = null; // Invalidated session
  -        }
  -        if (locale == null)
  -            locale = defaultLocale;
  -        return (resources.getMessage(locale, this.srcKey));
  +        return (RequestUtils.message(pageContext, bundle,
  +                                     locale, this.srcKey));
   
       }
   
  
  
  
  1.3       +115 -28   
jakarta-struts/src/share/org/apache/struts/taglib/html/OptionTag.java
  
  Index: OptionTag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/OptionTag.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- OptionTag.java    2001/01/08 21:36:07     1.2
  +++ OptionTag.java    2001/02/20 01:48:46     1.3
  @@ -1,13 +1,13 @@
   /*
  - * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/OptionTag.java,v 1.2 
2001/01/08 21:36:07 craigmcc Exp $
  - * $Revision: 1.2 $
  - * $Date: 2001/01/08 21:36:07 $
  + * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/OptionTag.java,v 1.3 
2001/02/20 01:48:46 craigmcc Exp $
  + * $Revision: 1.3 $
  + * $Date: 2001/02/20 01:48:46 $
    *
    * ====================================================================
    *
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 1999 The Apache Software Foundation.  All rights
  + * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -29,7 +29,7 @@
    *    Alternately, this acknowlegement may appear in the software itself,
    *    if and wherever such third-party acknowlegements normally appear.
    *
  - * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
  + * 4. The names "The Jakarta Project", "Struts", and "Apache Software
    *    Foundation" must not be used to endorse or promote products derived
    *    from this software without prior written permission. For written
    *    permission, please contact [EMAIL PROTECTED]
  @@ -65,11 +65,15 @@
   
   import java.lang.reflect.Method;
   import java.io.IOException;
  +import java.util.Locale;
   import javax.servlet.jsp.JspException;
   import javax.servlet.jsp.PageContext;
   import javax.servlet.jsp.JspWriter;
   import javax.servlet.jsp.tagext.BodyTagSupport;
  +import org.apache.struts.action.Action;
   import org.apache.struts.util.MessageResources;
  +import org.apache.struts.util.RequestUtils;
  +import org.apache.struts.util.ResponseUtils;
   
   
   /**
  @@ -78,7 +82,7 @@
    * the server if this option is selected.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.2 $ $Date: 2001/01/08 21:36:07 $
  + * @version $Revision: 1.3 $ $Date: 2001/02/20 01:48:46 $
    */
   
   public class OptionTag extends BodyTagSupport {
  @@ -88,6 +92,12 @@
   
   
       /**
  +     * The default locale for our server.
  +     */
  +    protected static final Locale defaultLocale = Locale.getDefault();
  +
  +
  +    /**
        * The message resources for this package.
        */
       protected static MessageResources messages =
  @@ -95,36 +105,75 @@
   
   
       /**
  -     * The server value for this option.
  +     * The message text to be displayed to the user for this tag (if any)
        */
  -    protected String value = null;
  +    protected String text = null;
   
   
       // ------------------------------------------------------------- Properties
   
   
       /**
  -     * Return the server value.
  +     * The name of the servlet context attribute containing our message
  +     * resources.
        */
  -    public String getValue() {
  +    protected String bundle = Action.MESSAGES_KEY;
   
  -     return (this.value);
  +    public String getBundle() {
  +        return (this.bundle);
  +    }
   
  +    public void setBundle(String bundle) {
  +        this.bundle = bundle;
       }
   
   
       /**
  -     * Set the server value.
  -     *
  -     * @param value The new server value
  +     * The key used to look up the text displayed to the user for this
  +     * option, if any.
        */
  -    public void setValue(String value) {
  +    protected String key = null;
   
  -     this.value = value;
  +    public String getKey() {
  +        return (this.key);
  +    }
  +
  +    public void setKey(String key) {
  +        this.key = key;
  +    }
  +
  +
  +    /**
  +     * The name of the attribute containing the Locale to be used for
  +     * looking up internationalized messages.
  +     */
  +    protected String locale = Action.LOCALE_KEY;
  +
  +    public String getLocale() {
  +        return (this.locale);
  +    }
   
  +    public void setLocale(String locale) {
  +        this.locale = locale;
       }
   
   
  +    /**
  +     * The server value for this option, also used to match against the
  +     * current property value to determine whether this option should be
  +     * marked as selected.
  +     */
  +    protected String value = null;
  +
  +    public String getValue() {
  +     return (this.value);
  +    }
  +
  +    public void setValue(String value) {
  +     this.value = value;
  +    }
  +
  +
       // --------------------------------------------------------- Public Methods
   
   
  @@ -141,7 +190,24 @@
       }
   
   
  +    /**
  +     * Process the body text of this tag (if any).
  +     *
  +     * @exception JspException if a JSP exception has occurred
  +     */
  +    public int doAfterBody() throws JspException {
  +
  +        String text = bodyContent.getString();
  +        if (text != null) {
  +            text = text.trim();
  +            if (text.length() > 0)
  +                this.text = text;
  +        }
  +        return (SKIP_BODY);
   
  +    }
  +
  +
       /**
        * Process the end of this tag.
        *
  @@ -152,11 +218,14 @@
        // Acquire the select tag we are associated with
        SelectTag selectTag =
          (SelectTag) pageContext.getAttribute(Constants.SELECT_KEY);
  -     if (selectTag == null)
  -         throw new JspException
  +     if (selectTag == null) {
  +            JspException e = new JspException
                (messages.getMessage("optionTag.select"));
  +            RequestUtils.saveException(pageContext, e);
  +            throw e;
  +        }
   
  -     // Generate an HTML element
  +     // Generate an HTML <option> element
        StringBuffer results = new StringBuffer();
        results.append("<option value=\"");
        results.append(value);
  @@ -164,20 +233,15 @@
        if (value.equals(selectTag.getMatch()))
            results.append(" selected");
        results.append(">");
  -     if (bodyContent == null)
  +        String text = text();
  +     if (text == null)
            results.append(value);
        else
  -         results.append(bodyContent.getString().trim());
  +         results.append(text);
        results.append("</option>");
   
        // Render this element to our writer
  -     JspWriter writer = pageContext.getOut();
  -     try {
  -         writer.println(results.toString());
  -     } catch (IOException e) {
  -         throw new JspException
  -             (messages.getMessage("common.io", e.toString()));
  -     }
  +        ResponseUtils.write(pageContext, results.toString());
   
        // Continue evaluating this page
        return (EVAL_PAGE);
  @@ -191,7 +255,30 @@
       public void release() {
   
        super.release();
  +        bundle = Action.MESSAGES_KEY;
  +        key = null;
  +        locale = Action.LOCALE_KEY;
  +        text = null;
        value = null;
  +
  +    }
  +
  +
  +    // ------------------------------------------------------ Protected Methods
  +
  +
  +    /**
  +     * Return the text to be displayed to the user for this option (if any).
  +     *
  +     * @exception JspException if an error occurs
  +     */
  +    protected String text() throws JspException {
  +
  +        if (this.text != null)
  +            return (this.text);
  +        else
  +            return (RequestUtils.message(pageContext, bundle,
  +                                         locale, key));
   
       }
   
  
  
  
  1.2       +1 -0      
jakarta-struts/src/share/org/apache/struts/util/LocalStrings.properties
  
  Index: LocalStrings.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/LocalStrings.properties,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- LocalStrings.properties   2001/02/13 00:06:24     1.1
  +++ LocalStrings.properties   2001/02/20 01:48:46     1.2
  @@ -3,4 +3,5 @@
   lookup.method=No getter method for property {0} of bean {1}
   lookup.scope=Invalid bean scope {0}
   lookup.target=Exception thrown by getter for property {0} of bean {1}
  +message.bundle=Cannot find message resources under key {0}
   write.io=Input/output error: {0}
  
  
  
  1.6       +78 -4     
jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java
  
  Index: RequestUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- RequestUtils.java 2001/02/12 00:32:14     1.5
  +++ RequestUtils.java 2001/02/20 01:48:46     1.6
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v 1.5 
2001/02/12 00:32:14 craigmcc Exp $
  - * $Revision: 1.5 $
  - * $Date: 2001/02/12 00:32:14 $
  + * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v 1.6 
2001/02/20 01:48:46 craigmcc Exp $
  + * $Revision: 1.6 $
  + * $Date: 2001/02/20 01:48:46 $
    *
    * ====================================================================
    *
  @@ -70,6 +70,7 @@
   import java.util.HashMap;
   import java.util.Hashtable;
   import java.util.Iterator;
  +import java.util.Locale;
   import java.util.Map;
   import javax.servlet.ServletException;
   import javax.servlet.http.HttpServletRequest;
  @@ -88,7 +89,7 @@
    * in the Struts controller framework.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.5 $ $Date: 2001/02/12 00:32:14 $
  + * @version $Revision: 1.6 $ $Date: 2001/02/20 01:48:46 $
    */
   
   public class RequestUtils {
  @@ -98,6 +99,12 @@
   
   
       /**
  +     * The default Locale for our server.
  +     */
  +    private static final Locale defaultLocale = Locale.getDefault();
  +
  +
  +    /**
        * The message resources for this package.
        */
       private static MessageResources messages =
  @@ -227,6 +234,73 @@
               throw new JspException
                   (messages.getMessage("lookup.method", property, name));
           }
  +
  +    }
  +
  +
  +    /**
  +     * Look up and return a message string, based on the specified parameters.
  +     *
  +     * @param pageContext The PageContext associated with this request
  +     * @param bundle Name of the servlet context attribute for our
  +     *  message resources bundle
  +     * @param locale Name of the session attribute for our user's Locale
  +     * @param key Message key to be looked up and returned
  +     *
  +     * @exception JspException if a lookup error occurs (will have been
  +     *  saved in the request already)
  +     */
  +    public static String message(PageContext pageContext, String bundle,
  +                                 String locale, String key)
  +        throws JspException {
  +
  +        return (message(pageContext, bundle, locale, key, null));
  +
  +    }
  +
  +
  +    /**
  +     * Look up and return a message string, based on the specified parameters.
  +     *
  +     * @param pageContext The PageContext associated with this request
  +     * @param bundle Name of the servlet context attribute for our
  +     *  message resources bundle
  +     * @param locale Name of the session attribute for our user's Locale
  +     * @param key Message key to be looked up and returned
  +     * @param args Replacement parameters for this message
  +     *
  +     * @exception JspException if a lookup error occurs (will have been
  +     *  saved in the request already)
  +     */
  +    public static String message(PageContext pageContext, String bundle,
  +                                 String locale, String key, Object args)
  +        throws JspException {
  +
  +        // Look up the requested MessageResources
  +        if (bundle == null)
  +            bundle = Action.MESSAGES_KEY;
  +        MessageResources resources = (MessageResources)
  +            pageContext.getAttribute(bundle, PageContext.APPLICATION_SCOPE);
  +        if (resources == null) {
  +            JspException e = new JspException
  +                (messages.getMessage("message.bundle", bundle));
  +            saveException(pageContext, e);
  +            throw e;
  +        }
  +
  +        // Look up the requested Locale
  +        if (locale == null)
  +            locale = Action.LOCALE_KEY;
  +        Locale userLocale = (Locale)
  +            pageContext.getAttribute(locale, PageContext.SESSION_SCOPE);
  +        if (userLocale == null)
  +            userLocale = defaultLocale;
  +
  +        // Return the requested message
  +        if (args == null)
  +            return (resources.getMessage(userLocale, key));
  +        else
  +            return (resources.getMessage(userLocale, key, args));
   
       }
   
  
  
  

Reply via email to