All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.web.servlet.tags.MessageTag Maven / Gradle / Ivy

There is a newer version: 2.0-M4
Show newest version
/*
 * Copyright 2002-2004 the original author or authors.
 * 
 * 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.
 */ 

package org.springframework.web.servlet.tags;

import java.io.IOException;
import java.util.Collection;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;

import org.springframework.context.MessageSource;
import org.springframework.context.NoSuchMessageException;
import org.springframework.util.StringUtils;
import org.springframework.web.util.ExpressionEvaluationUtils;
import org.springframework.web.util.HtmlUtils;
import org.springframework.web.util.JavaScriptUtils;
import org.springframework.web.util.TagUtils;

/**
 * Custom JSP tag to look up a message in the scope of this page.
 * Messages are looked up using the ApplicationContext, and thus should
 * support internationalization.
 *
 * 

Regards a HTML escaping setting, either on this tag instance, * the page level, or the web.xml level. Can also apply JavaScript escaping. * *

If "code" isn't set or cannot be resolved, "text" will be used as default * message. Thus, this tag can also be used for HTML escaping of any texts. * * @author Rod Johnson * @author Juergen Hoeller * @see #setCode * @see #setText * @see #setHtmlEscape * @see #setJavaScriptEscape * @see HtmlEscapeTag#setDefaultHtmlEscape * @see org.springframework.web.util.WebUtils#HTML_ESCAPE_CONTEXT_PARAM */ public class MessageTag extends HtmlEscapingAwareTag { private String code; private Object arguments; private String text; private String var; private String scope = TagUtils.SCOPE_PAGE; private boolean javaScriptEscape = false; /** * Set the message code for this tag. */ public void setCode(String code) { this.code = code; } /** * Set optional message arguments for this tag, as a comma-delimited * String (each String argument can contain JSP EL), an Object array * (used as argument array), or a single Object (used as single argument). */ public void setArguments(Object arguments) { this.arguments = arguments; } /** * Set the message text for this tag. */ public void setText(String text) { this.text = text; } /** * Set PageContext attribute name under which to expose * a variable that contains the resolved message. * @see #setScope * @see javax.servlet.jsp.PageContext#setAttribute */ public void setVar(String var) { this.var = var; } /** * Set the scope to export the variable to. * Default is SCOPE_PAGE ("page"). * @see #setVar * @see org.springframework.web.util.TagUtils#SCOPE_PAGE * @see javax.servlet.jsp.PageContext#setAttribute */ public void setScope(String scope) { this.scope = scope; } /** * Set JavaScript escaping for this tag, as boolean value. * Default is false. */ public void setJavaScriptEscape(String javaScriptEscape) throws JspException { this.javaScriptEscape = ExpressionEvaluationUtils.evaluateBoolean("javaScriptEscape", javaScriptEscape, pageContext); } protected final int doStartTagInternal() throws JspException, IOException { MessageSource messageSource = getMessageSource(); if (messageSource == null) { throw new JspTagException("No corresponding MessageSource found"); } String resolvedCode = ExpressionEvaluationUtils.evaluateString("code", this.code, pageContext); String resolvedText = ExpressionEvaluationUtils.evaluateString("text", this.text, pageContext); String resolvedVar = ExpressionEvaluationUtils.evaluateString("var", this.var, pageContext); try { String msg = null; if (resolvedCode != null) { Object[] argumentsArray = null; if (this.arguments instanceof String) { argumentsArray = StringUtils.commaDelimitedListToStringArray((String) this.arguments); for (int i = 0; i < argumentsArray.length; i++) { argumentsArray[i] = ExpressionEvaluationUtils.evaluateString( "argument[" + i + "]", (String) argumentsArray[i], pageContext); } } else if (this.arguments instanceof Object[]) { argumentsArray = (Object[]) this.arguments; } else if (this.arguments instanceof Collection) { argumentsArray = ((Collection) this.arguments).toArray(); } else if (this.arguments != null) { // assume a single argument object argumentsArray = new Object[] {this.arguments}; } if (resolvedText != null) { msg = messageSource.getMessage( resolvedCode, argumentsArray, resolvedText, getRequestContext().getLocale()); } else { msg = messageSource.getMessage( resolvedCode, argumentsArray, getRequestContext().getLocale()); } } else { msg = resolvedText; } // HTML and/or JavaScript escape, if demanded msg = isHtmlEscape() ? HtmlUtils.htmlEscape(msg) : msg; msg = this.javaScriptEscape ? JavaScriptUtils.javaScriptEscape(msg) : msg; // expose as variable, if demanded if (resolvedVar != null) { String resolvedScope = ExpressionEvaluationUtils.evaluateString("scope", this.scope, pageContext); pageContext.setAttribute(resolvedVar, msg, TagUtils.getScope(resolvedScope)); } else { writeMessage(msg); } return EVAL_BODY_INCLUDE; } catch (NoSuchMessageException ex) { throw new JspTagException(getNoSuchMessageExceptionDescription(ex)); } } /** * Write the message to the page. *

Can be overridden in subclasses, e.g. for testing purposes. * @param msg the message to write * @throws IOException if writing failed */ protected void writeMessage(String msg) throws IOException { pageContext.getOut().write(String.valueOf(msg)); } /** * Use the application context itself for default message resolution. */ protected MessageSource getMessageSource() { return getRequestContext().getWebApplicationContext(); } /** * Return default exception message. */ protected String getNoSuchMessageExceptionDescription(NoSuchMessageException ex) { return ex.getMessage(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy