/*
* 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 javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.springframework.lang.Nullable;
The <argument>
tag is based on the JSTL fmt:param
tag. The purpose is to support arguments inside the message and theme tags. This tag must be nested under an argument aware tag.
Attribute Summary
Attribute
Required?
Runtime Expression?
Description
value
false
true
The value of the argument.
Author: Nicholas Williams See Also: Since: 4.0
/**
* The {@code <argument>} tag is based on the JSTL {@code fmt:param} tag.
* The purpose is to support arguments inside the message and theme tags.
*
* <p>This tag must be nested under an argument aware tag.
*
* <table>
* <caption>Attribute Summary</caption>
* <thead>
* <tr>
* <th>Attribute</th>
* <th>Required?</th>
* <th>Runtime Expression?</th>
* <th>Description</th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td>value</td>
* <td>false</td>
* <td>true</td>
* <td>The value of the argument.</td>
* </tr>
* </tbody>
* </table>
*
* @author Nicholas Williams
* @since 4.0
* @see MessageTag
* @see ThemeTag
*/
@SuppressWarnings("serial")
public class ArgumentTag extends BodyTagSupport {
@Nullable
private Object value;
private boolean valueSet;
Set the value of the argument (optional).
If not set, the tag's body content will get evaluated.
Params: - value – the parameter value
/**
* Set the value of the argument (optional).
* If not set, the tag's body content will get evaluated.
* @param value the parameter value
*/
public void setValue(Object value) {
this.value = value;
this.valueSet = true;
}
@Override
public int doEndTag() throws JspException {
Object argument = null;
if (this.valueSet) {
argument = this.value;
}
else if (getBodyContent() != null) {
// Get the value from the tag body
argument = getBodyContent().getString().trim();
}
// Find a param-aware ancestor
ArgumentAware argumentAwareTag = (ArgumentAware) findAncestorWithClass(this, ArgumentAware.class);
if (argumentAwareTag == null) {
throw new JspException("The argument tag must be a descendant of a tag that supports arguments");
}
argumentAwareTag.addArgument(argument);
return EVAL_PAGE;
}
@Override
public void release() {
super.release();
this.value = null;
this.valueSet = false;
}
}