public int doEndTag() throws JspException
    {

        String key = null;
        LocalizationContext locCtxt = null;

        // determine the message key by...
        if (keySpecified)
        {
            // ... reading 'key' attribute
            key = keyAttrValue;
        } else
        {
            // ... retrieving and trimming our body
            if (bodyContent != null && bodyContent.getString() != null)
                key = bodyContent.getString().trim();
        }

        if ((key == null) || key.equals(""))
        {
            try
            {
                pageContext.getOut().print("??????");
            } catch (IOException ioe)
            {
                throw new JspTagException(ioe.toString(), ioe);
            }
            return EVAL_PAGE;
        }

        String prefix = null;
        if (!bundleSpecified)
        {
            Tag t = findAncestorWithClass(this, BundleSupport.class);
            if (t != null)
            {
                // use resource bundle from parent <bundle> tag
                BundleSupport parent = (BundleSupport) t;
                locCtxt = parent.getLocalizationContext();
                prefix = parent.getPrefix();
            } else
            {
                locCtxt = BundleSupport.getLocalizationContext(pageContext);
            }
        } else
        {
            // localization context taken from 'bundle' attribute
            locCtxt = bundleAttrValue;
            if (locCtxt.getLocale() != null)
            {
                SetLocaleSupport.setResponseLocale(pageContext, locCtxt.getLocale());
            }
        }

        String message = UNDEFINED_KEY + key + UNDEFINED_KEY;
        if (locCtxt != null)
        {
            ResourceBundle bundle = locCtxt.getResourceBundle();
            if (bundle != null)
            {
                try
                {
                    // prepend 'prefix' attribute from parent bundle
                    if (prefix != null)
                        key = prefix + key;
                    message = bundle.getString(key);
                    // Perform parametric replacement if required
                    if (!params.isEmpty())
                    {
                        Object[] messageArgs = params.toArray();
                        Locale locale;
                        if (locCtxt.getLocale() != null)
                        {
                            locale = locCtxt.getLocale();
                        } else
                        {
                            // For consistency with the <fmt:formatXXX> actions,
                            // we try to get a locale that matches the user's
                            // preferences
                            // as well as the locales supported by 'date' and
                            // 'number'.
                            // System.out.println("LOCALE-LESS LOCCTXT: GETTING FORMATTING LOCALE");
                            locale = SetLocaleSupport.getFormattingLocale(pageContext);
                            // System.out.println("LOCALE: " + locale);
                        }
                        MessageFormat formatter = (locale != null) ? Humanize.messageFormat(message, locale)
                                : Humanize.messageFormat(message);
                        message = formatter.format(messageArgs);
                    }
                } catch (MissingResourceException mre)
                {
                    message = UNDEFINED_KEY + key + UNDEFINED_KEY;
                }
            }
        }

        if (var != null)
        {
            pageContext.setAttribute(var, message, scope);
        } else
        {
            try
            {
                pageContext.getOut().print(message);
            } catch (IOException ioe)
            {
                throw new JspTagException(ioe.toString(), ioe);
            }
        }

        return EVAL_PAGE;
    }
public int doEndTag ( ) throws JspException { String key = null ; LocalizationContext locCtxt = null ; if ( keySpecified ) { key = keyAttrValue ; } else { if ( bodyContent != null && bodyContent . getString ( ) != null ) key = bodyContent . getString ( ) . trim ( ) ; } if ( ( key == null ) || key . equals ( "" ) ) { try { pageContext . getOut ( ) . print ( "??????" ) ; } catch ( IOException ioe ) { throw new JspTagException ( ioe . toString ( ) , ioe ) ; } return EVAL_PAGE ; } String prefix = null ; if ( ! bundleSpecified ) { Tag t = findAncestorWithClass ( this , BundleSupport . class ) ; if ( t != null ) { BundleSupport parent = ( BundleSupport ) t ; locCtxt = parent . getLocalizationContext ( ) ; prefix = parent . getPrefix ( ) ; } else { locCtxt = BundleSupport . getLocalizationContext ( pageContext ) ; } } else { locCtxt = bundleAttrValue ; if ( locCtxt . getLocale ( ) != null ) { SetLocaleSupport . setResponseLocale ( pageContext , locCtxt . getLocale ( ) ) ; } } String message = UNDEFINED_KEY + key + UNDEFINED_KEY ; if ( locCtxt != null ) { ResourceBundle bundle = locCtxt . getResourceBundle ( ) ; if ( bundle != null ) { try { if ( prefix != null ) key = prefix + key ; message = bundle . getString ( key ) ; if ( ! params . isEmpty ( ) ) { Object [ ] messageArgs = params . toArray ( ) ; Locale locale ; if ( locCtxt . getLocale ( ) != null ) { locale = locCtxt . getLocale ( ) ; } else { locale = SetLocaleSupport . getFormattingLocale ( pageContext ) ; } MessageFormat formatter = ( locale != null ) ? Humanize . messageFormat ( message , locale ) : Humanize . messageFormat ( message ) ; message = formatter . format ( messageArgs ) ; } } catch ( MissingResourceException mre ) { message = UNDEFINED_KEY + key + UNDEFINED_KEY ; } } } if ( var != null ) { pageContext . setAttribute ( var , message , scope ) ; } else { try { pageContext . getOut ( ) . print ( message ) ; } catch ( IOException ioe ) { throw new JspTagException ( ioe . toString ( ) , ioe ) ; } } return EVAL_PAGE ; }
Tag attributes known at translation time