You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by pb...@apache.org on 2008/06/08 23:28:15 UTC

svn commit: r664559 - in /struts/struts1/trunk/taglib/src/main: java/org/apache/struts/taglib/TagUtils.java java/org/apache/struts/taglib/html/HtmlTag.java resources/META-INF/tld/struts-html.tld

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>