You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/09/02 22:01:02 UTC

svn commit: r1164682 - in /myfaces/core/trunk: impl/src/test/java/org/apache/myfaces/renderkit/html/ shared/src/main/java/org/apache/myfaces/shared/renderkit/html/

Author: lu4242
Date: Fri Sep  2 20:01:01 2011
New Revision: 1164682

URL: http://svn.apache.org/viewvc?rev=1164682&view=rev
Log:
MYFACES-3298 h:outputText incorectly renders an extra <span>

Modified:
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessageRendererTest.java
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessagesRendererTest.java
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlTextRendererTest.java
    myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java
    myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java
    myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextRendererBase.java

Modified: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessageRendererTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessageRendererTest.java?rev=1164682&r1=1164681&r2=1164682&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessageRendererTest.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessageRendererTest.java Fri Sep  2 20:01:01 2011
@@ -82,17 +82,11 @@ public class HtmlMessageRendererTest ext
         //inputText.setParent(form);
         inputText.setId("myInputId");
         
-        message.setErrorClass(ERROR_CLASS);
-        message.setWarnClass(WARN_CLASS);
-        message.setInfoClass(INFO_CLASS);
         //message.setParent(form);
         
         form.getChildren().add(inputText);
         form.getChildren().add(message);
         
-        facesContext.addMessage(inputText.getClientId(facesContext), 
-                new FacesMessage("Validation message here."));
-        
         facesContext.getAttributes().put("org.apache.myfaces.RENDERED_JSF_JS", Boolean.TRUE);
     }
 
@@ -124,7 +118,12 @@ public class HtmlMessageRendererTest ext
             new HtmlRenderedAttr("styleClass", "styleClass", "class=\"infoClass\""),
         };
         
+        facesContext.addMessage(inputText.getClientId(facesContext), 
+                new FacesMessage("Validation message here."));        
         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
+        message.setErrorClass(ERROR_CLASS);
+        message.setWarnClass(WARN_CLASS);
+        message.setInfoClass(INFO_CLASS);
         message.setStyle("left: 48px; top: 432px; position: absolute");
         message.setFor("myInputId");
         
@@ -136,11 +135,26 @@ public class HtmlMessageRendererTest ext
         }
     }
     
+    public void testRenderSpanOnlyWhenNecessary() throws Exception
+    {
+        facesContext.addMessage(inputText.getClientId(), new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
+        message.setFor("myInputId");
+        message.encodeEnd(facesContext);
+        facesContext.renderResponse();
+        String output = writer.getWriter().toString();
+        System.out.println(output);
+    }
+    
     public void testHtmlPropertyPassTruNotRendered() throws Exception
     {
         HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateAttrsNotRenderedForReadOnly();
         
+        facesContext.addMessage(inputText.getClientId(facesContext), 
+                new FacesMessage("Validation message here."));
         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
+        message.setErrorClass(ERROR_CLASS);
+        message.setWarnClass(WARN_CLASS);
+        message.setInfoClass(INFO_CLASS);
         message.setStyle("left: 48px; top: 432px; position: absolute");
         message.setFor("myInputId");
         

Modified: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessagesRendererTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessagesRendererTest.java?rev=1164682&r1=1164681&r2=1164682&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessagesRendererTest.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessagesRendererTest.java Fri Sep  2 20:01:01 2011
@@ -68,11 +68,6 @@ public class HtmlMessagesRendererTest ex
                 messages.getRendererType(),
                 new HtmlMessagesRenderer());
         
-        messages.setErrorClass(ERROR_CLASS);
-        messages.setWarnClass(WARN_CLASS);
-        messages.setInfoClass(INFO_CLASS);
-        messages.setWarnStyle("warnStyle");
-        
         facesContext.getAttributes().put("org.apache.myfaces.RENDERED_JSF_JS", Boolean.TRUE);
     }
 
@@ -107,6 +102,11 @@ public class HtmlMessagesRendererTest ex
         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
         facesContext.addMessage("test2", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary2", "detailWarnSummary2"));        
 
+        messages.setErrorClass(ERROR_CLASS);
+        messages.setWarnClass(WARN_CLASS);
+        messages.setInfoClass(INFO_CLASS);
+        messages.setWarnStyle("warnStyle");
+        
         messages.setLayout("table");
         //messages.setStyle("left: 48px; top: 432px; position: absolute");
         
@@ -118,12 +118,84 @@ public class HtmlMessagesRendererTest ex
         }
     }
     
+    public void testRenderSpanOnlyWhenNecessary1() throws Exception
+    {
+        facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
+        messages.encodeEnd(facesContext);
+        facesContext.renderResponse();
+        String output = writer.getWriter().toString();
+        assertTrue(output.contains("warnSumary"));
+        assertTrue(!output.contains("span"));
+    }
+    
+    public void testRenderSpanOnlyWhenNecessary2() throws Exception
+    {
+        facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
+        messages.setLayout("table");
+        messages.encodeEnd(facesContext);
+        facesContext.renderResponse();
+        String output = writer.getWriter().toString();
+        assertTrue(output.contains("warnSumary"));
+        assertTrue(!output.contains("span"));
+    }
+    
+    public void testRenderSpanOnlyWhenNecessary3() throws Exception
+    {
+        facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
+        messages.setId("msgPanel");
+        messages.encodeEnd(facesContext);
+        facesContext.renderResponse();
+        String output = writer.getWriter().toString();
+        assertTrue(output.contains("warnSumary"));
+        assertTrue(!output.contains("span"));
+    }
+    
+    /**
+     * It should output the class on li
+     * @throws Exception
+     */
+    public void testRenderSpanOnlyWhenNecessary4() throws Exception
+    {
+        facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_FATAL, "fatalSumary", "detailFatalSummary"));
+        messages.setId("msgPanel");
+        messages.setFatalClass("fatalClass");
+        messages.encodeEnd(facesContext);
+        facesContext.renderResponse();
+        String output = writer.getWriter().toString();
+        assertTrue(output.contains("fatalSumary"));
+        assertTrue(output.contains("li class=\"fatalClass\""));
+        assertTrue(!output.contains("span"));
+    }
+    
+    /**
+     * It should output the class on td
+     * @throws Exception
+     */
+    public void testRenderSpanOnlyWhenNecessary5() throws Exception
+    {
+        facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_FATAL, "fatalSumary", "detailFatalSummary"));
+        messages.setId("msgPanel");
+        messages.setLayout("table");
+        messages.setFatalClass("fatalClass");
+        messages.encodeEnd(facesContext);
+        facesContext.renderResponse();
+        String output = writer.getWriter().toString();
+        assertTrue(output.contains("fatalSumary"));
+        assertTrue(output.contains("td class=\"fatalClass\""));
+        assertTrue(!output.contains("span"));
+    }
+    
     public void testHtmlPropertyPassTruNotRendered() throws Exception
     {
         HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateAttrsNotRenderedForReadOnly();
         
         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
 
+        messages.setErrorClass(ERROR_CLASS);
+        messages.setWarnClass(WARN_CLASS);
+        messages.setInfoClass(INFO_CLASS);
+        messages.setWarnStyle("warnStyle");
+        
         messages.setLayout("table");
         messages.setStyle("left: 48px; top: 432px; position: absolute");
         

Modified: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlTextRendererTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlTextRendererTest.java?rev=1164682&r1=1164681&r2=1164682&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlTextRendererTest.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlTextRendererTest.java Fri Sep  2 20:01:01 2011
@@ -107,6 +107,23 @@ public class HtmlTextRendererTest extend
         assertEquals("<span class=\"myStyleClass\">Output</span>", output);
         assertNotSame("Output", output);
     }
+    
+    /**
+     * Don't add span over escape
+     * @throws IOException
+     */
+    public void testEscapeNoSpan() throws IOException
+    {
+        outputText.setValue("Output");
+        outputText.setEscape(true);
+
+        outputText.encodeEnd(facesContext);
+        facesContext.renderResponse();
+
+        String output = writer.getWriter().toString();
+
+        assertEquals("Output", output);
+    }
 
     public void testHtmlPropertyPassTru() throws Exception
     {

Modified: myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java?rev=1164682&r1=1164681&r2=1164682&view=diff
==============================================================================
--- myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java (original)
+++ myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java Fri Sep  2 20:01:01 2011
@@ -164,11 +164,31 @@ public abstract class HtmlMessageRendere
     }
 
     protected void renderSingleFacesMessage(FacesContext facesContext,
+            UIComponent message,
+            FacesMessage facesMessage,
+            String messageClientId,
+            boolean renderId,
+            boolean renderStyleAndStyleClass)
+    throws IOException
+    {
+        Map<String, List<ClientBehavior>> behaviors = null;
+        if (message instanceof ClientBehaviorHolder && JavascriptUtils.isJavascriptAllowed(facesContext.getExternalContext()))
+        {
+            behaviors = ((ClientBehaviorHolder) message).getClientBehaviors();
+        }
+        boolean wrapSpan = (message.getId() != null && !message.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) 
+            || (behaviors != null && !behaviors.isEmpty());
+
+        renderSingleFacesMessage(facesContext, message, facesMessage, messageClientId, renderId, renderStyleAndStyleClass, wrapSpan);
+    }
+    
+    protected void renderSingleFacesMessage(FacesContext facesContext,
                                             UIComponent message,
                                             FacesMessage facesMessage,
                                             String messageClientId,
                                             boolean renderId,
-                                            boolean renderStyleAndStyleClass)
+                                            boolean renderStyleAndStyleClass,
+                                            boolean wrapSpan)
             throws IOException
     {
         // determine style and style class
@@ -197,8 +217,7 @@ public abstract class HtmlMessageRendere
             behaviors = ((ClientBehaviorHolder) message).getClientBehaviors();
         }
         
-        if ( (message.getId() != null && !message.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) 
-                || (behaviors != null && !behaviors.isEmpty()) )
+        if ( wrapSpan )
         {
             span = true;
 

Modified: myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java?rev=1164682&r1=1164681&r2=1164682&view=diff
==============================================================================
--- myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java (original)
+++ myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java Fri Sep  2 20:01:01 2011
@@ -186,7 +186,7 @@ public abstract class HtmlMessagesRender
             renderSingleFacesMessage(facesContext,
                     messages,
                     facesMessage,
-                    messagesIterator.getClientId(),false,false);
+                    messagesIterator.getClientId(),false,false,false);
             writer.endElement(HTML.LI_ELEM);
         }
 
@@ -239,7 +239,7 @@ public abstract class HtmlMessagesRender
             renderSingleFacesMessage(facesContext,
                     messages,
                     facesMessage,
-                    messagesIterator.getClientId(),false,false);
+                    messagesIterator.getClientId(),false,false,false);
 
             writer.endElement(HTML.TD_ELEM);
             writer.endElement(HTML.TR_ELEM);

Modified: myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextRendererBase.java?rev=1164682&r1=1164681&r2=1164682&view=diff
==============================================================================
--- myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextRendererBase.java (original)
+++ myfaces/core/trunk/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextRendererBase.java Fri Sep  2 20:01:01 2011
@@ -109,8 +109,7 @@ public class HtmlTextRendererBase
             if (isCommonPropertiesOptimizationEnabled(facesContext))
             {
                 long commonPropertiesMarked = CommonPropertyUtils.getCommonPropertiesMarked(component);
-                
-                if (commonPropertiesMarked > 0)
+                if ( (commonPropertiesMarked & ~(CommonPropertyConstants.ESCAPE_PROP)) > 0)
                 {
                     span = true;
                     writer.startElement(HTML.SPAN_ELEM, component);