You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by cr...@apache.org on 2001/02/20 02:48:47 UTC

cvs commit: jakarta-struts/src/share/org/apache/struts/util LocalStrings.properties RequestUtils.java

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 <ma...@tumbleweed.com>
  
  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 apache@apache.org.
  @@ -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 apache@apache.org.
  @@ -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));
   
       }