/*
* 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.form;
import javax.servlet.jsp.JspException;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.web.servlet.support.RequestDataValueProcessor;
The <button>
tag renders a form field label in an HTML 'button' tag. It is provided for completeness if the application relies on a RequestDataValueProcessor
.
Attribute Summary
Attribute
Required?
Runtime Expression?
Description
disabled
false
true
HTML Optional Attribute. Setting the value of this attribute to 'true'
will disable the HTML element.
id
false
true
HTML Standard Attribute
name
false
true
The name attribute for the HTML button tag
value
false
true
The name attribute for the HTML button tag
Author: Rossen Stoyanchev Since: 3.1
/**
* The {@code <button>} tag renders a form field label in an HTML 'button' tag.
* It is provided for completeness if the application relies on a
* {@link RequestDataValueProcessor}.
*
* <p>
* <table>
* <caption>Attribute Summary</caption>
* <thead>
* <tr>
* <th class="colFirst">Attribute</th>
* <th class="colOne">Required?</th>
* <th class="colOne">Runtime Expression?</th>
* <th class="colLast">Description</th>
* </tr>
* </thead>
* <tbody>
* <tr class="altColor">
* <td><p>disabled</p></td>
* <td><p>false</p></td>
* <td><p>true</p></td>
* <td><p>HTML Optional Attribute. Setting the value of this attribute to 'true'
* will disable the HTML element.</p></td>
* </tr>
* <tr class="rowColor">
* <td><p>id</p></td>
* <td><p>false</p></td>
* <td><p>true</p></td>
* <td><p>HTML Standard Attribute</p></td>
* </tr>
* <tr class="altColor">
* <td><p>name</p></td>
* <td><p>false</p></td>
* <td><p>true</p></td>
* <td><p>The name attribute for the HTML button tag</p></td>
* </tr>
* <tr class="rowColor">
* <td><p>value</p></td>
* <td><p>false</p></td>
* <td><p>true</p></td>
* <td><p>The name attribute for the HTML button tag</p></td>
* </tr>
* </tbody>
* </table>
*
* @author Rossen Stoyanchev
* @since 3.1
*/
@SuppressWarnings("serial")
public class ButtonTag extends AbstractHtmlElementTag {
The name of the 'disabled
' attribute. /**
* The name of the '{@code disabled}' attribute.
*/
public static final String DISABLED_ATTRIBUTE = "disabled";
@Nullable
private TagWriter tagWriter;
@Nullable
private String name;
@Nullable
private String value;
private boolean disabled;
Get the value of the 'name
' attribute. /**
* Get the value of the '{@code name}' attribute.
*/
public void setName(String name) {
this.name = name;
}
Set the value of the 'name
' attribute. /**
* Set the value of the '{@code name}' attribute.
*/
@Override
@Nullable
public String getName() {
return this.name;
}
Set the value of the 'value
' attribute. /**
* Set the value of the '{@code value}' attribute.
*/
public void setValue(@Nullable String value) {
this.value = value;
}
Get the value of the 'value
' attribute. /**
* Get the value of the '{@code value}' attribute.
*/
@Nullable
public String getValue() {
return this.value;
}
Set the value of the 'disabled
' attribute. /**
* Set the value of the '{@code disabled}' attribute.
*/
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
Get the value of the 'disabled
' attribute. /**
* Get the value of the '{@code disabled}' attribute.
*/
public boolean isDisabled() {
return this.disabled;
}
@Override
protected int writeTagContent(TagWriter tagWriter) throws JspException {
tagWriter.startTag("button");
writeDefaultAttributes(tagWriter);
tagWriter.writeAttribute("type", getType());
writeValue(tagWriter);
if (isDisabled()) {
tagWriter.writeAttribute(DISABLED_ATTRIBUTE, "disabled");
}
tagWriter.forceBlock();
this.tagWriter = tagWriter;
return EVAL_BODY_INCLUDE;
}
Writes the 'value
' attribute to the supplied TagWriter
. Subclasses may choose to override this implementation to control exactly when the value is written. /**
* Writes the '{@code value}' attribute to the supplied {@link TagWriter}.
* Subclasses may choose to override this implementation to control exactly
* when the value is written.
*/
protected void writeValue(TagWriter tagWriter) throws JspException {
String valueToUse = (getValue() != null ? getValue() : getDefaultValue());
tagWriter.writeAttribute("value", processFieldValue(getName(), valueToUse, getType()));
}
Return the default value.
Returns: the default value if none supplied
/**
* Return the default value.
* @return the default value if none supplied
*/
protected String getDefaultValue() {
return "Submit";
}
Get the value of the 'type
' attribute. Subclasses can override this to change the type of 'input
' element rendered. Default value is 'submit
'. /**
* Get the value of the '{@code type}' attribute. Subclasses
* can override this to change the type of '{@code input}' element
* rendered. Default value is '{@code submit}'.
*/
protected String getType() {
return "submit";
}
Closes the 'button
' block tag. /**
* Closes the '{@code button}' block tag.
*/
@Override
public int doEndTag() throws JspException {
Assert.state(this.tagWriter != null, "No TagWriter set");
this.tagWriter.endTag();
return EVAL_PAGE;
}
}