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

org.springframework.web.servlet.tags.form.ErrorsTag Maven / Gradle / Ivy

There is a newer version: 5.3.34
Show newest version
/*
 * Copyright 2002-2007 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.form;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.BodyTag;

import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;

/**
 * Form tag for displaying errors for a particular field or object.
 *
 * 

This tag supports three main usage patterns: * *

    *
  1. Field only - set 'path' to the field name (or path)
  2. *
  3. Object errors only - omit 'path'
  4. *
  5. All errors - set 'path' to '*'
  6. *
* * @author Rob Harrop * @author Juergen Hoeller * @author Rick Evans * @since 2.0 */ public class ErrorsTag extends AbstractHtmlElementBodyTag implements BodyTag { /** * The key under which this tag exposes error messages in * the {@link PageContext#PAGE_SCOPE page context scope}. */ public static final String MESSAGES_ATTRIBUTE = "messages"; /** * The HTML 'span' tag. */ public static final String SPAN_TAG = "span"; private String element = SPAN_TAG; private String delimiter = "
"; /** * Stores any value that existed in the 'errors messages' before the tag was started. */ private Object oldMessages; private boolean errorMessagesWereExposed; /** * Set the HTML element must be used to render the error messages. *

Defaults to an HTML '<span/>' tag. */ public void setElement(String element) { Assert.hasText(element, "'element' cannot be null or blank"); this.element = element; } /** * Get the HTML element must be used to render the error messages. */ public String getElement() { return this.element; } /** * Set the delimiter to be used between error messages. *

Defaults to an HTML '<br/>' tag. */ public void setDelimiter(String delimiter) { this.delimiter = delimiter; } /** * Return the delimiter to be used between error messages. */ public String getDelimiter() { return this.delimiter; } /** * Get the value for the HTML 'name' attribute. *

Simply returns "" (the empty string) because the * 'name' attribute is not a validate attribute for the * 'span' element. */ protected String getName() throws JspException { return ""; } /** * Get the value for the HTML 'id' attribute. *

Appends '.errors' to the value returned by {@link #getCompletePath()}. * @return the value for the HTML 'name' attribute * @see #getPath() */ protected String autogenerateId() throws JspException { return getCompletePath() + ".errors"; } /** * Should rendering of this tag proceed at all? *

Only renders output when there are errors for the configured {@link #setPath path}. * @return true only when there are errors for the configured {@link #setPath path} */ protected boolean shouldRender() throws JspException { try { return getBindStatus().isError(); } catch (IllegalStateException ex) { // Neither BindingResult nor target object available. return false; } } protected void renderDefaultContent(TagWriter tagWriter) throws JspException { tagWriter.startTag(getElement()); writeDefaultAttributes(tagWriter); String delimiter = ObjectUtils.getDisplayString(evaluate("delimiter", getDelimiter())); String[] errorMessages = getBindStatus().getErrorMessages(); for (int i = 0; i < errorMessages.length; i++) { String errorMessage = errorMessages[i]; if (i > 0) { tagWriter.appendValue(delimiter); } tagWriter.appendValue(getDisplayString(errorMessage)); } tagWriter.endTag(); } /** * Exposes any bind status error messages under {@link #MESSAGES_ATTRIBUTE this key} * in the {@link PageContext#PAGE_SCOPE}. *

Only called if {@link #shouldRender()} returns true. * @see #removeAttributes() */ protected void exposeAttributes() throws JspException { List errorMessages = new ArrayList(); errorMessages.addAll(Arrays.asList(getBindStatus().getErrorMessages())); this.oldMessages = this.pageContext.getAttribute(MESSAGES_ATTRIBUTE, PageContext.PAGE_SCOPE); this.pageContext.setAttribute(MESSAGES_ATTRIBUTE, errorMessages, PageContext.PAGE_SCOPE); this.errorMessagesWereExposed = true; } /** * Removes any bind status error messages that were previously stored under * {@link #MESSAGES_ATTRIBUTE this key} in the {@link PageContext#PAGE_SCOPE}. * @see #exposeAttributes() */ protected void removeAttributes() { if (this.errorMessagesWereExposed) { if (this.oldMessages != null) { this.pageContext.setAttribute(MESSAGES_ATTRIBUTE, this.oldMessages, PageContext.PAGE_SCOPE); this.oldMessages = null; } else { this.pageContext.removeAttribute(MESSAGES_ATTRIBUTE, PageContext.PAGE_SCOPE); } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy