/*
* 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 javax.servlet.jsp.JspException;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
/**
* Base class for databinding-aware JSP tags that render HTML element. Provides
* a set of properties corresponding to the set of HTML attributes that are common
* across elements.
*
* @author Rob Harrop
* @since 2.0
*/
public abstract class AbstractHtmlElementTag extends AbstractDataBoundFormElementTag {
public static final String CLASS_ATTRIBUTE = "class";
public static final String STYLE_ATTRIBUTE = "style";
public static final String LANG_ATTRIBUTE = "lang";
public static final String TITLE_ATTRIBUTE = "title";
public static final String DIR_ATTRIBUTE = "dir";
public static final String TABINDEX_ATTRIBUTE = "tabindex";
public static final String ONCLICK_ATTRIBUTE = "onclick";
public static final String ONDBLCLICK_ATTRIBUTE = "ondblclick";
public static final String ONMOUSEDOWN_ATTRIBUTE = "onmousedown";
public static final String ONMOUSEUP_ATTRIBUTE = "onmouseup";
public static final String ONMOUSEOVER_ATTRIBUTE = "onmouseover";
public static final String ONMOUSEMOVE_ATTRIBUTE = "onmousemove";
public static final String ONMOUSEOUT_ATTRIBUTE = "onmouseout";
public static final String ONKEYPRESS_ATTRIBUTE = "onkeypress";
public static final String ONKEYUP_ATTRIBUTE = "onkeyup";
public static final String ONKEYDOWN_ATTRIBUTE = "onkeydown";
private String cssClass;
private String cssErrorClass;
private String cssStyle;
private String lang;
private String title;
private String dir;
private String tabindex;
private String onclick;
private String ondblclick;
private String onmousedown;
private String onmouseup;
private String onmouseover;
private String onmousemove;
private String onmouseout;
private String onkeypress;
private String onkeyup;
private String onkeydown;
/**
* Set the value of the '<code>class</code>' attribute.
* May be a runtime expression.
*/
public void setCssClass(String cssClass) {
this.cssClass = cssClass;
}
/**
* Get the value of the '<code>class</code>' attribute.
* May be a runtime expression.
*/
protected String getCssClass() {
return this.cssClass;
}
/**
* The CSS class to use when the field bound to a particular tag has errors.
* May be a runtime expression.
*/
public void setCssErrorClass(String cssErrorClass) {
this.cssErrorClass = cssErrorClass;
}
/**
* The CSS class to use when the field bound to a particular tag has errors.
* May be a runtime expression.
*/
protected String getCssErrorClass() {
return this.cssErrorClass;
}
/**
* Set the value of the '<code>style</code>' attribute.
* May be a runtime expression.
*/
public void setCssStyle(String cssStyle) {
this.cssStyle = cssStyle;
}
/**
* Get the value of the '<code>style</code>' attribute.
* May be a runtime expression.
*/
protected String getCssStyle() {
return this.cssStyle;
}
/**
* Set the value of the '<code>lang</code>' attribute.
* May be a runtime expression.
*/
public void setLang(String lang) {
this.lang = lang;
}
/**
* Get the value of the '<code>lang</code>' attribute.
* May be a runtime expression.
*/
protected String getLang() {
return this.lang;
}
/**
* Set the value of the '<code>title</code>' attribute.
* May be a runtime expression.
*/
public void setTitle(String title) {
this.title = title;
}
/**
* Get the value of the '<code>title</code>' attribute.
* May be a runtime expression.
*/
protected String getTitle() {
return this.title;
}
/**
* Set the value of the '<code>dir</code>' attribute.
* May be a runtime expression.
*/
public void setDir(String dir) {
this.dir = dir;
}
/**
* Get the value of the '<code>dir</code>' attribute.
* May be a runtime expression.
*/
protected String getDir() {
return this.dir;
}
/**
* Set the value of the '<code>tabindex</code>' attribute.
* May be a runtime expression.
*/
public void setTabindex(String tabindex) {
this.tabindex = tabindex;
}
/**
* Get the value of the '<code>tabindex</code>' attribute.
* May be a runtime expression.
*/
protected String getTabindex() {
return this.tabindex;
}
/**
* Set the value of the '<code>onclick</code>' attribute.
* May be a runtime expression.
*/
public void setOnclick(String onclick) {
this.onclick = onclick;
}
/**
* Get the value of the '<code>onclick</code>' attribute.
* May be a runtime expression.
*/
protected String getOnclick() {
return this.onclick;
}
/**
* Set the value of the '<code>ondblclick</code>' attribute.
* May be a runtime expression.
*/
public void setOndblclick(String ondblclick) {
this.ondblclick = ondblclick;
}
/**
* Get the value of the '<code>ondblclick</code>' attribute.
* May be a runtime expression.
*/
protected String getOndblclick() {
return this.ondblclick;
}
/**
* Set the value of the '<code>onmousedown</code>' attribute.
* May be a runtime expression.
*/
public void setOnmousedown(String onmousedown) {
this.onmousedown = onmousedown;
}
/**
* Get the value of the '<code>onmousedown</code>' attribute.
* May be a runtime expression.
*/
protected String getOnmousedown() {
return this.onmousedown;
}
/**
* Set the value of the '<code>onmouseup</code>' attribute.
* May be a runtime expression.
*/
public void setOnmouseup(String onmouseup) {
this.onmouseup = onmouseup;
}
/**
* Get the value of the '<code>onmouseup</code>' attribute.
* May be a runtime expression.
*/
protected String getOnmouseup() {
return this.onmouseup;
}
/**
* Set the value of the '<code>onmouseover</code>' attribute.
* May be a runtime expression.
*/
public void setOnmouseover(String onmouseover) {
this.onmouseover = onmouseover;
}
/**
* Get the value of the '<code>onmouseover</code>' attribute.
* May be a runtime expression.
*/
protected String getOnmouseover() {
return this.onmouseover;
}
/**
* Set the value of the '<code>onmousemove</code>' attribute.
* May be a runtime expression.
*/
public void setOnmousemove(String onmousemove) {
this.onmousemove = onmousemove;
}
/**
* Get the value of the '<code>onmousemove</code>' attribute.
* May be a runtime expression.
*/
protected String getOnmousemove() {
return this.onmousemove;
}
/**
* Set the value of the '<code>onmouseout</code>' attribute.
* May be a runtime expression.
*/
public void setOnmouseout(String onmouseout) {
this.onmouseout = onmouseout;
}
/**
* Get the value of the '<code>onmouseout</code>' attribute.
* May be a runtime expression.
*/
protected String getOnmouseout() {
return this.onmouseout;
}
/**
* Set the value of the '<code>onkeypress</code>' attribute.
* May be a runtime expression.
*/
public void setOnkeypress(String onkeypress) {
this.onkeypress = onkeypress;
}
/**
* Get the value of the '<code>onkeypress</code>' attribute.
* May be a runtime expression.
*/
protected String getOnkeypress() {
return this.onkeypress;
}
/**
* Set the value of the '<code>onkeyup</code>' attribute.
* May be a runtime expression.
*/
public void setOnkeyup(String onkeyup) {
this.onkeyup = onkeyup;
}
/**
* Get the value of the '<code>onkeyup</code>' attribute.
* May be a runtime expression.
*/
protected String getOnkeyup() {
return this.onkeyup;
}
/**
* Set the value of the '<code>onkeydown</code>' attribute.
* May be a runtime expression.
*/
public void setOnkeydown(String onkeydown) {
this.onkeydown = onkeydown;
}
/**
* Get the value of the '<code>onkeydown</code>' attribute.
* May be a runtime expression.
*/
protected String getOnkeydown() {
return this.onkeydown;
}
/**
* Writes the default attributes configured via this base class to the supplied {@link TagWriter}.
* Subclasses should call this when they want the base attribute set to be written to the output.
*/
protected void writeDefaultAttributes(TagWriter tagWriter) throws JspException {
super.writeDefaultAttributes(tagWriter);
writeOptionalAttributes(tagWriter);
}
/**
* Writes the optional attributes configured via this base class to the supplied {@link TagWriter}.
* Called by {@link #writeDefaultAttributes(TagWriter)}.
*/
protected void writeOptionalAttributes(TagWriter tagWriter) throws JspException {
tagWriter.writeOptionalAttributeValue(CLASS_ATTRIBUTE, resolveCssClass());
tagWriter.writeOptionalAttributeValue(STYLE_ATTRIBUTE,
ObjectUtils.getDisplayString(evaluate("cssStyle", getCssStyle())));
writeOptionalAttribute(tagWriter, LANG_ATTRIBUTE, getLang());
writeOptionalAttribute(tagWriter, TITLE_ATTRIBUTE, getTitle());
writeOptionalAttribute(tagWriter, DIR_ATTRIBUTE, getDir());
writeOptionalAttribute(tagWriter, TABINDEX_ATTRIBUTE, getTabindex());
writeOptionalAttribute(tagWriter, ONCLICK_ATTRIBUTE, getOnclick());
writeOptionalAttribute(tagWriter, ONDBLCLICK_ATTRIBUTE, getOndblclick());
writeOptionalAttribute(tagWriter, ONMOUSEDOWN_ATTRIBUTE, getOnmousedown());
writeOptionalAttribute(tagWriter, ONMOUSEUP_ATTRIBUTE, getOnmouseup());
writeOptionalAttribute(tagWriter, ONMOUSEOVER_ATTRIBUTE, getOnmouseover());
writeOptionalAttribute(tagWriter, ONMOUSEMOVE_ATTRIBUTE, getOnmousemove());
writeOptionalAttribute(tagWriter, ONMOUSEOUT_ATTRIBUTE, getOnmouseout());
writeOptionalAttribute(tagWriter, ONKEYPRESS_ATTRIBUTE, getOnkeypress());
writeOptionalAttribute(tagWriter, ONKEYUP_ATTRIBUTE, getOnkeyup());
writeOptionalAttribute(tagWriter, ONKEYDOWN_ATTRIBUTE, getOnkeydown());
}
/**
* Gets the appropriate CSS class to use based on the state of the current
* {@link org.springframework.web.servlet.support.BindStatus} object.
*/
protected String resolveCssClass() throws JspException {
if (getBindStatus().isError() && StringUtils.hasText(getCssErrorClass())) {
return ObjectUtils.getDisplayString(evaluate("cssErrorClass", getCssErrorClass()));
}
else {
return ObjectUtils.getDisplayString(evaluate("cssClass", getCssClass()));
}
}
}