You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by ma...@apache.org on 2001/06/26 07:18:27 UTC

cvs commit: jakarta-struts/src/share/org/apache/struts/taglib/bean LocalStrings.properties MessageTag.java

martinc     01/06/25 22:18:26

  Modified:    doc      struts-bean.xml
               src/share/org/apache/struts/taglib/bean
                        LocalStrings.properties MessageTag.java
  Log:
  Added 'name', 'property' and 'scope' attributes to <bean:message> so that
  the message resource key can be obtained dynamically from a bean.
  
  Revision  Changes    Path
  1.5       +44 -2     jakarta-struts/doc/struts-bean.xml
  
  Index: struts-bean.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/doc/struts-bean.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- struts-bean.xml	2001/05/09 19:31:00	1.4
  +++ struts-bean.xml	2001/06/26 05:18:22	1.5
  @@ -444,6 +444,10 @@
       <p>Retrieves an internationalized message for the specified locale,
       using the specified message key, and write it to the output stream.
       Up to five parametric replacements (such as "{0}") may be specified.</p>
  +
  +    <p>The message key may be specified directly, using the <code>key</code>
  +    attribute, or indirectly, using the <code>name</code> and
  +    <code>property</code> attributes to obtain it from a bean.</p>
       </info>
   
       <attribute>
  @@ -505,11 +509,13 @@
   
       <attribute>
         <name>key</name>
  -      <required>true</required>
  +      <required>false</required>
         <rtexprvalue>true</rtexprvalue>
         <info>
         <p>The message key of the requested message, which must have
  -      a corresponding value in the message resources.</p>
  +      a corresponding value in the message resources. If not specified,
  +      the key is obtained from the <code>name</code> and
  +      <code>property</code> attributes.</p>
         </info>
       </attribute>
   
  @@ -522,6 +528,42 @@
         selected <code>Locale</code> object is stored.  If not specified,
         the default name (the value of the <code>Action.LOCALE_KEY</code>
         constant string) is used.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>name</name>
  +      <required>false</required>
  +      <rtexprvalue>true</rtexprvalue>
  +      <info>
  +      <p>Specifies the attribute name of the bean whose property is accessed
  +      to retrieve the value specified by <code>property</code> (if
  +      specified).  If <code>property</code> is not specified, the value of
  +      this bean itself will be used as the message resource key.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>property</name>
  +      <required>false</required>
  +      <rtexprvalue>true</rtexprvalue>
  +      <info>
  +      <p>Specifies the name of the property to be accessed on the bean
  +      specified by <code>name</code>.  This value may be a simple, indexed,
  +      or nested property reference expression.  If not specified, the value
  +      of the bean identified by <code>name</code> will itself be used as the
  +      message resource key.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>scope</name>
  +      <required>false</required>
  +      <rtexprvalue>true</rtexprvalue>
  +      <info>
  +      <p>Specifies the variable scope searched to retrieve the bean specified
  +      by <code>name</code>.  If not specified, the default rules applied by
  +      <code>PageContext.findAttribute()</code> are applied.</p>
         </info>
       </attribute>
   
  
  
  
  1.13      +1 -0      jakarta-struts/src/share/org/apache/struts/taglib/bean/LocalStrings.properties
  
  Index: LocalStrings.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/LocalStrings.properties,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- LocalStrings.properties	2001/05/09 19:31:11	1.12
  +++ LocalStrings.properties	2001/06/26 05:18:24	1.13
  @@ -8,6 +8,7 @@
   include.read=Exception reading resource {0}: {1}
   include.url=Cannot create include URL: {0}
   message.message=Missing message for key {0}
  +message.property=Property for message key must be a String
   message.resources=Missing resources attribute {0}
   page.selector=Invalid page context selector {0}
   parameter.get=No parameter {0} was included in this request
  
  
  
  1.5       +64 -5     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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MessageTag.java	2001/02/20 01:48:45	1.4
  +++ MessageTag.java	2001/06/26 05:18:25	1.5
  @@ -1,7 +1,7 @@
   /*
  - * $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 $
  + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/MessageTag.java,v 1.5 2001/06/26 05:18:25 martinc Exp $
  + * $Revision: 1.5 $
  + * $Date: 2001/06/26 05:18:25 $
    *
    * ====================================================================
    *
  @@ -82,7 +82,7 @@
    * <code>ActionServlet</code> implementation.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.4 $ $Date: 2001/02/20 01:48:45 $
  + * @version $Revision: 1.5 $ $Date: 2001/06/26 05:18:25 $
    */
   
   public class MessageTag extends TagSupport {
  @@ -196,6 +196,48 @@
   
   
       /**
  +     * Name of the bean that contains the message key.
  +     */
  +    protected String name = null;
  +
  +    public String getName() {
  +        return (this.name);
  +    }
  +
  +    public void setName(String name) {
  +        this.name = name;
  +    }
  +
  +
  +    /**
  +     * Name of the property to be accessed on the specified bean.
  +     */
  +    protected String property = null;
  +
  +    public String getProperty() {
  +        return (this.property);
  +    }
  +
  +    public void setProperty(String property) {
  +        this.property = property;
  +    }
  +
  +
  +    /**
  +     * The scope to be searched to retrieve the specified bean.
  +     */
  +    protected String scope = null;
  +
  +    public String getScope() {
  +        return (this.scope);
  +    }
  +
  +    public void setScope(String scope) {
  +        this.scope = scope;
  +    }
  +
  +
  +    /**
        * The session scope key under which our Locale is stored.
        */
       protected String localeKey = Action.LOCALE_KEY;
  @@ -227,6 +269,20 @@
        */
       public int doStartTag() throws JspException {
   
  +        String key = this.key;
  +        if (key == null) {
  +            // Look up the requested property value
  +            Object value =
  +                RequestUtils.lookup(pageContext, name, property, scope);
  +            if (value != null && !(value instanceof String)) {
  +                JspException e = new JspException
  +                    (messages.getMessage("message.property", key));
  +                RequestUtils.saveException(pageContext, e);
  +                throw e;
  +            }
  +            key = (String)value;
  +        }
  +
   	// Construct the optional arguments array we will be using
   	Object args[] = new Object[5];
   	args[0] = arg0;
  @@ -237,7 +293,7 @@
   
   	// Retrieve the message string we are looking for
   	String message = RequestUtils.message(pageContext, this.bundle,
  -                                              this.localeKey, this.key, args);
  +                                              this.localeKey, key, args);
   	if (message == null) {
   	    JspException e = new JspException
   		(messages.getMessage("message.message", key));
  @@ -267,6 +323,9 @@
   	arg4 = null;
   	bundle = Action.MESSAGES_KEY;
   	key = null;
  +	name = null;
  +	property = null;
  +	scope = null;
   	localeKey = Action.LOCALE_KEY;
   
       }