Author: pbenedict Date: Sun Jun 8 14:28:14 2008 New Revision: 664559 URL: http://svn.apache.org/viewvc?rev=664559&view=rev Log: STR-2740: Support XHTML versions
Modified: struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/TagUtils.java struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/HtmlTag.java struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld Modified: struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/TagUtils.java URL: http://svn.apache.org/viewvc/struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/TagUtils.java?rev=664559&r1=664558&r2=664559&view=diff ============================================================================== --- struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/TagUtils.java (original) +++ struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/TagUtils.java Sun Jun 8 14:28:14 2008 @@ -48,6 +48,8 @@ import java.lang.reflect.InvocationTargetException; +import java.math.BigDecimal; + import java.net.MalformedURLException; import java.util.HashMap; @@ -62,7 +64,44 @@ * @since Struts 1.2 */ public class TagUtils { - /** + + /** + * Constant for + * <a href="http://www.w3.org/TR/xhtml1/#docconf">XHTML 1.0</a> + * conformance. + * + * @since Struts 1.4 + */ + public static final BigDecimal XHTML_1_0 = new BigDecimal("1.0"); + + /** + * Constant for + * <a href="http://www.w3.org/TR/xhtml11/conformance.html">XHTML 1.1</a> + * conformance. + * + * @since Struts 1.4 + */ + public static final BigDecimal XHTML_1_1 = new BigDecimal("1.1"); + + /** + * Constant for + * <a href="http://www.w3.org/TR/xhtml2/conformance.html#s_conform">XHTML + * 2.0</a> conformance. + * + * @since Struts 1.4 + */ + public static final BigDecimal XHTML_2_0 = new BigDecimal("2.0"); + + /** + * Constant for + * <a href="http://www.w3.org/html/wg/html5/#terminology">XHTML 5.0</a> + * conformance. + * + * @since Struts 1.4 + */ + public static final BigDecimal XHTML_5_0 = new BigDecimal("5.0"); + + /** * The Singleton instance. * @since 1.3.5 Changed to non-final so it may be overridden, use at your own risk (you've been warned!!) */ Modified: struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/HtmlTag.java URL: http://svn.apache.org/viewvc/struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/HtmlTag.java?rev=664559&r1=664558&r2=664559&view=diff ============================================================================== --- struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/HtmlTag.java (original) +++ struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/HtmlTag.java Sun Jun 8 14:28:14 2008 @@ -20,6 +20,8 @@ */ package org.apache.struts.taglib.html; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; @@ -28,6 +30,7 @@ import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.TagSupport; +import java.math.BigDecimal; import java.util.Locale; /** @@ -41,6 +44,11 @@ // ------------------------------------------------------------- Properties /** + * Commons Logging instance. + */ + private static Log log = LogFactory.getLog(HtmlTag.class); + + /** * The message resources for this package. */ protected static MessageResources messages = @@ -51,6 +59,13 @@ * Are we rendering an xhtml page? */ protected boolean xhtml = false; + + /** + * What version of XHTML is being rendered? + * + * @since Struts 1.4 + */ + private BigDecimal xhtmlVersion = XHTML_1_0; /** * Are we rendering a lang attribute? @@ -66,6 +81,18 @@ public void setXhtml(boolean xhtml) { this.xhtml = xhtml; } + + public String getXhtmlVersion() { + return this.xhtmlVersion.toString(); + } + + public void setXhtmlVersion(String xhtmlVersion) { + if (xhtmlVersion != null) { + this.xhtmlVersion = new BigDecimal(xhtmlVersion); + } else { + this.xhtmlVersion = XHTML_1_0; + } + } /** * Returns true if the tag should render a lang attribute. @@ -117,23 +144,53 @@ boolean validLanguage = isValidRfc2616(language); boolean validCountry = isValidRfc2616(country); + // XHTML document conformance if (this.xhtml) { this.pageContext.setAttribute(Globals.XHTML_KEY, "true", PageContext.PAGE_SCOPE); + this.pageContext.setAttribute(Globals.XHTML_VERSION_KEY, + xhtmlVersion, PageContext.REQUEST_SCOPE); - sb.append(" xmlns=\"http://www.w3.org/1999/xhtml\""); + // 1.1 + if (xhtmlVersion.equals(TagUtils.XHTML_1_1)) { + sb.append(" xmlns=\"http://www.w3.org/1999/xhtml\""); + sb.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""); + sb.append(" xsi:schemaLocation=\"http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd\""); + } + // 2.0 + else if (xhtmlVersion.equals(TagUtils.XHTML_2_0)) { + sb.append(" xmlns=\"http://www.w3.org/2002/06/xhtml2/\""); + sb.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""); + sb.append(" xsi:schemaLocation=\"http://www.w3.org/2002/06/xhtml2/ http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd\""); + } + // 5.0 + else if (xhtmlVersion.equals(TagUtils.XHTML_5_0)) { + sb.append(" xmlns=\"http://www.w3.org/1999/xhtml\""); + } + // 1.0/Default + else { + if (!xhtmlVersion.equals(TagUtils.XHTML_1_0)) { + log.warn("Defaulting to XHTML 1.0. Unknown version: " + xhtmlVersion); + xhtmlVersion = TagUtils.XHTML_1_0; + } + sb.append(" xmlns=\"http://www.w3.org/1999/xhtml\""); + } } - if ((this.lang || this.xhtml) && validLanguage) { - sb.append(" lang=\""); - sb.append(language); + // If language is specified, output the attribute + // unless XHTML is version >= 1.1 + if (this.lang && validLanguage) { + if (!this.xhtml || (xhtmlVersion.compareTo(XHTML_1_1) < 0)) { + sb.append(" lang=\""); + sb.append(language); + + if (validCountry) { + sb.append("-"); + sb.append(country); + } - if (validCountry) { - sb.append("-"); - sb.append(country); - } - - sb.append("\""); + sb.append("\""); + } } if (this.xhtml && validLanguage) { 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?rev=664559&r1=664558&r2=664559&view=diff ============================================================================== --- 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 Sun Jun 8 14:28:14 2008 @@ -2999,6 +2999,20 @@ ]]> </description> </attribute> + <attribute> + <name>xhtmlVersion</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + <description> + <![CDATA[ + <p>Sets the version of XHTML to render in the String form + MAJOR.MINOR. The default is "1.0" when not specified.</p> + + <dl><dt><b>Since:</b></dt> + <dd>Struts 1.4</dd></dl> + ]]> + </description> + </attribute> </tag> <tag> <name>image</name>