Author: pbenedict
Date: Sat Apr 7 22:45:54 2007
New Revision: 526528
URL: http://svn.apache.org/viewvc?view=rev&rev=526528
Log:
STR-1305: Adding label tag
Added:
struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/LabelTag.java
(with props)
Modified:
struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld
Added:
struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/LabelTag.java
URL:
http://svn.apache.org/viewvc/struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/LabelTag.java?view=auto&rev=526528
==============================================================================
---
struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/LabelTag.java
(added)
+++
struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/LabelTag.java
Sat Apr 7 22:45:54 2007
@@ -0,0 +1,203 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.struts.taglib.html;
+
+import org.apache.struts.taglib.TagUtils;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * Renders an HTML LABEL tag within the Struts framework.
+ *
+ * @version $Rev$
+ * @since Struts 1.4
+ */
+public class LabelTag extends BaseInputTag {
+
+ // ----------------------------------------------------- Instance Variables
+
+ protected String forId = null;
+
+ protected String key = null;
+
+ protected boolean required = false;
+
+ /**
+ * The body content of this tag (if any).
+ */
+ protected String text = null;
+
+ // ------------------------------------------------------------- Properties
+
+ public String getForId() {
+ return this.forId;
+ }
+
+ public String getKey() {
+ return this.key;
+ }
+
+ public boolean getRequired() {
+ return this.required;
+ }
+
+ public void setForId(String forId) {
+ this.forId = forId;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public void setRequired(boolean required) {
+ this.required = required;
+ }
+
+ // ----------------------------------------------------- Constructor
+
+ public LabelTag() {
+ super();
+ }
+
+ // --------------------------------------------------------- Methods
+
+ /**
+ * Render the beginning of the hyperlink.
+ * <p>
+ * Support for indexed property since Struts 1.1
+ *
+ * @throws JspException if a JSP exception has occurred
+ */
+ public int doStartTag() throws JspException {
+ // Evaluate the body of this tag
+ this.text = null;
+
+ return (EVAL_BODY_BUFFERED);
+ }
+
+ /**
+ * Save the associated label from the body content.
+ *
+ * @throws JspException if a JSP exception has occurred
+ */
+ public int doAfterBody() throws JspException {
+ if (this.bodyContent != null) {
+ String value = this.bodyContent.getString().trim();
+ if (value.length() > 0) {
+ this.text = value;
+ }
+ }
+
+ return (SKIP_BODY);
+ }
+
+ /**
+ * Render the end of the hyperlink.
+ *
+ * @throws JspException if a JSP exception has occurred
+ */
+ public int doEndTag() throws JspException {
+ // Generate the opening element
+ StringBuffer results = new StringBuffer("<label");
+ prepareAttribute(results, "accesskey", getAccesskey());
+ prepareAttribute(results, "for", getForId() != null ? getForId()
+ : prepareName());
+ prepareAttribute(results, "tabindex", getTabindex());
+ prepareAttribute(results, "title", getTitle());
+ results.append(prepareStyles());
+ results.append(prepareEventHandlers());
+ prepareFocusEvents(results);
+ prepareOtherAttributes(results);
+ results.append(">");
+
+ // Prepare the label value
+ this.value = message(this.text, this.key);
+ prepareValue(results);
+
+ // End tag
+ results.append("</label>");
+ TagUtils.getInstance().write(this.pageContext, results.toString());
+
+ return (EVAL_PAGE);
+ }
+
+ /**
+ * Returns the CSS style class that indicates a "required" styling. If no
+ * styling is wanted, return <code>null</code>.
+ *
+ * @return the style class; can be <code>null</code>
+ * @see #prepareAttribute(StringBuffer, String, Object)
+ */
+ protected String getRequiredStyleClass() {
+ return "required";
+ }
+
+ /**
+ * If this label is describes a required field, then the CSS style class
+ * attribute gets appended with the "required" style, if not null, which
+ * takes effect for both the normal and error style.
+ *
+ * @see #getRequiredStyleClass()
+ * @see #prepareValue(String)
+ */
+ protected void prepareAttribute(StringBuffer handlers, String name,
+ Object value) {
+
+ if ("class".equals(name) && this.required) {
+ String requiredStyleClass = getRequiredStyleClass();
+ if (requiredStyleClass != null) {
+ value = (value != null) ? (value + " " + requiredStyleClass)
+ : requiredStyleClass;
+ }
+ }
+ super.prepareAttribute(handlers, name, value);
+ }
+
+ /**
+ * Performs any pre-processing on the <code>value</code> property before
+ * printing it. The default behavior is to append an asterik inside a
+ * <code>span</code> tag with a CSS class attribute of
+ * [EMAIL PROTECTED] #getRequiredStyleClass()}, if the
<code>required</code>
+ * property is set.
+ *
+ * @param handlers The StringBuffer that output will be appended to.
+ * @see #getRequiredStyleClass()
+ */
+ protected void prepareValue(StringBuffer handlers) {
+ handlers.append(this.value);
+ if (this.required) {
+ handlers.append(" <span class=\"");
+ handlers.append(getRequiredStyleClass());
+ handlers.append("\">*</span>");
+ }
+ }
+
+ /**
+ * Release any acquired resources.
+ */
+ public void release() {
+ super.release();
+ this.forId = null;
+ this.key = null;
+ this.required = false;
+ this.text = null;
+ }
+}
Propchange:
struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/LabelTag.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/LabelTag.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified:
struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld
URL:
http://svn.apache.org/viewvc/struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld?view=diff&rev=526528&r1=526527&r2=526528
==============================================================================
--- struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld
(original)
+++ struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld
Sat Apr 7 22:45:54 2007
@@ -4275,6 +4275,340 @@
</attribute>
</tag>
<tag>
+ <name>label</name>
+ <tag-class>org.apache.struts.taglib.html.LabelTag</tag-class>
+ <description>
+ <![CDATA[
+ <p><strong>Render a Label</strong></p>
+ ]]>
+ </description>
+ <attribute>
+ <name>accesskey</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The keyboard character used to move focus immediately to
this
+ element.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>bundle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ The servlet context attributes key for the MessageResources
+ instance to use when printing the label value. If not
+ specified, defaults to the application resources configured
+ for our action servlet.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>dir</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The direction for weak/neutral text for this element.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>errorStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>CSS styles to be applied to this HTML element if
+ an error exists for it.</p>
+
+ <p><strong>N.B.</strong> If present, this overrides the
+ <code>style</code> attribute in the event of an error.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>errorStyleClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>CSS stylesheet class to be applied to this HTML element if
+ an error exists for it (renders a "class" attribute).</p>
+
+ <p><strong>N.B.</strong> If present, this overrides the
+ <code>styleClass</code> attribute in the event of an error.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>errorStyleId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Identifier to be assigned to this HTML element if
+ an error exists for it (renders an "id" attribute).</p>
+
+ <p><strong>N.B.</strong> If present, this overrides the
+ <code>styleId</code> attribute in the event of an error.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>forId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Identifier to be assigned to this HTML element (renders
+ an "id" attribute).</p>
+
+ <p><strong>N.B.</strong> If present, the
<code>errorStyleId</code>
+ overrides this attribute in the event of an error for the
element.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>key</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ If specified, defines the message key to be looked up in
+ the resource bundle specified by <code>bundle</code> for
+ the value displayed to the user for this label. If not
+ specified, the value to be displayed is taken from the body
+ content of this tag.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>lang</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The language code for this element.</p>
+ <dl><dt><b>Since:</b></dt>
+ <dd>Struts 1.3.6</dd></dl>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ The attribute name of the bean whose properties are consulted
+ when rendering the current value of this input field. If not
+ specified, the bean associated with the form tag we are nested
+ within is utilized.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onblur</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element loses input
+ focus.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onclick</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element receives a
+ mouse click.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>ondblclick</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element receives a
+ mouse double click.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onfocus</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element receives
input
+ focus.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onkeydown</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element has focus
and a
+ key is depressed.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onkeypress</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element has focus
and a
+ key is depressed and released.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onkeyup</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element has focus
and a
+ key is released.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onmousedown</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element is under
the mouse
+ pointer and a mouse button is depressed.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onmousemove</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element is under
the
+ mouse pointer and the pointer is moved.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onmouseout</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element was under
the
+ mouse pointer but the pointer was moved outside the element.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onmouseover</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element was not
under
+ the mouse pointer but the pointer is moved inside the element.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>onmouseup</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ JavaScript event handler executed when this element is under
the
+ mouse pointer and a mouse button is released.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ Name of this input field, and the name of the corresponding
bean
+ property if value is not specified. The corresponding bean
property
+ (if any) must be of type String.
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>required</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ <description>
+ <![CDATA[
+ <p>Specifies that this label represents a required field.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>style</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>CSS styles to be applied to this HTML element.</p>
+
+ <p><strong>N.B.</strong> If present, the
<code>errorStyle</code>
+ overrides this attribute in the event of an error for the
element.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>styleClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>CSS stylesheet class to be applied to this HTML element
+ (renders a "class" attribute).</p>
+
+ <p><strong>N.B.</strong> If present, the
<code>errorStyleClass</code>
+ overrides this attribute in the event of an error for the
element.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>styleId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Identifier to be assigned to this HTML element (renders
+ an "id" attribute).</p>
+
+ <p><strong>N.B.</strong> If present, the
<code>errorStyleId</code>
+ overrides this attribute in the event of an error for the
element.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
<name>link</name>
<tag-class>org.apache.struts.taglib.html.LinkTag</tag-class>
<body-content>JSP</body-content>