org.springframework.web.servlet.tags.MessageTag Maven / Gradle / Ivy
/*
* Copyright 2002-2018 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
*
* https://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 java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.NoSuchMessageException;
import org.springframework.lang.Nullable;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.util.JavaScriptUtils;
import org.springframework.web.util.TagUtils;
/**
* The {@code } tag looks up a message in the scope of this page.
* Messages are resolved using the ApplicationContext and thus support
* internationalization.
*
* Detects an HTML escaping setting, either on this tag instance, the page level,
* or the {@code 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.
*
*
Message arguments can be specified via the {@link #setArguments(Object) arguments}
* attribute or by using nested {@code } tags.
*
*
* Attribute Summary
*
*
* Attribute
* Required?
* Runtime Expression?
* Description
*
*
*
*
* arguments
* false
* true
* 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).
*
*
* argumentSeparator
* false
* true
* The separator character to be used for splitting the arguments string
* value; defaults to a 'comma' (',').
*
*
* code
* false
* true
* The code (key) to use when looking up the message.
* If code is not provided, the text attribute will be used.
*
*
* htmlEscape
* false
* true
* Set HTML escaping for this tag, as boolean value.
* Overrides the default HTML escaping setting for the current page.
*
*
* javaScriptEscape
* false
* true
* Set JavaScript escaping for this tag, as boolean value.
* Default is false.
*
*
* message
* false
* true
* A MessageSourceResolvable argument (direct or through JSP EL).
* Fits nicely when used in conjunction with Spring’s own validation error
* classes which all implement the MessageSourceResolvable interface.
* For example, this allows you to iterate over all of the errors in a form,
* passing each error (using a runtime expression) as the value of this
* 'message' attribute, thus effecting the easy display of such error
* messages.
*
*
* scope
* false
* true
* The scope to use when exporting the result to a variable. This attribute
* is only used when var is also set. Possible values are page, request, session
* and application.
*
*
* text
* false
* true
* Default text to output when a message for the given code could not be
* found. If both text and code are not set, the tag will output null.
*
*
* var
* false
* true
* The string to use when binding the result to the page, request, session
* or application scope. If not specified, the result gets outputted to the writer
* (i.e. typically directly to the JSP).
*
*
*
*
* @author Rod Johnson
* @author Juergen Hoeller
* @author Nicholas Williams
* @see #setCode
* @see #setText
* @see #setHtmlEscape
* @see #setJavaScriptEscape
* @see HtmlEscapeTag#setDefaultHtmlEscape
* @see org.springframework.web.util.WebUtils#HTML_ESCAPE_CONTEXT_PARAM
* @see ArgumentTag
*/
@SuppressWarnings("serial")
public class MessageTag extends HtmlEscapingAwareTag implements ArgumentAware {
/**
* Default separator for splitting an arguments String: a comma (",").
*/
public static final String DEFAULT_ARGUMENT_SEPARATOR = ",";
@Nullable
private MessageSourceResolvable message;
@Nullable
private String code;
@Nullable
private Object arguments;
private String argumentSeparator = DEFAULT_ARGUMENT_SEPARATOR;
private List