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 2010/05/02 03:39:32 UTC

svn commit: r940144 - /myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlMessageRenderer.java

Author: lu4242
Date: Sun May  2 01:39:32 2010
New Revision: 940144

URL: http://svn.apache.org/viewvc?rev=940144&view=rev
Log:
TOMAHAWK-1494 HtmlMessageRenderer evaluates value expressions of not rendered components

Modified:
    myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlMessageRenderer.java

Modified: myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlMessageRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlMessageRenderer.java?rev=940144&r1=940143&r2=940144&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlMessageRenderer.java (original)
+++ myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlMessageRenderer.java Sun May  2 01:39:32 2010
@@ -160,7 +160,7 @@ public class HtmlMessageRenderer
 
     public static String findInputLabel(FacesContext facesContext, String inputClientId)
     {
-        Map outputLabelMap = getOutputLabelMap(facesContext);
+        Map<String, MessageLabelInfo> outputLabelMap = getOutputLabelMap(facesContext);
         MessageLabelInfo info = ((MessageLabelInfo)outputLabelMap.get(inputClientId));
 
         if(info == null)
@@ -184,12 +184,12 @@ public class HtmlMessageRenderer
             }
         }
 
-        return info==null?null:info.getText();
+        return info==null?null:info.getText(facesContext);
     }
 
     public static String findInputId(FacesContext facesContext, String inputClientId)
     {
-        Map outputLabelMap = getOutputLabelMap(facesContext);
+        Map<String, MessageLabelInfo> outputLabelMap = getOutputLabelMap(facesContext);
         MessageLabelInfo info = ((MessageLabelInfo)outputLabelMap.get(inputClientId));
 
         UIComponent comp = null;
@@ -222,12 +222,13 @@ public class HtmlMessageRenderer
      * @return a Map that reversely maps clientIds of components to their
      *         corresponding OutputLabel component
      */
-    private static Map getOutputLabelMap(FacesContext facesContext)
+    @SuppressWarnings("unchecked")
+    private static Map<String, MessageLabelInfo> getOutputLabelMap(FacesContext facesContext)
     {
-        Map map = (Map)facesContext.getExternalContext().getRequestMap().get(OUTPUT_LABEL_MAP);
+        Map<String, MessageLabelInfo> map = (Map<String, MessageLabelInfo>) facesContext.getExternalContext().getRequestMap().get(OUTPUT_LABEL_MAP);
         if (map == null)
         {
-            map = new HashMap();
+            map = new HashMap<String, MessageLabelInfo>();
             createOutputLabelMap(facesContext, facesContext.getViewRoot(), map);
             facesContext.getExternalContext().getRequestMap().put(OUTPUT_LABEL_MAP, map);
         }
@@ -236,9 +237,9 @@ public class HtmlMessageRenderer
 
     private static void createOutputLabelMap(FacesContext facesContext,
                                              UIComponent root,
-                                             Map map)
+                                             Map<String, MessageLabelInfo> map)
     {
-        for (Iterator it = root.getFacetsAndChildren(); it.hasNext(); )
+        for (Iterator<UIComponent> it = root.getFacetsAndChildren(); it.hasNext(); )
         {
             UIComponent child = (UIComponent)it.next();
             if (child instanceof HtmlOutputLabel)
@@ -253,9 +254,20 @@ public class HtmlMessageRenderer
                     }
                     else
                     {
-                        map.put(input.getClientId(facesContext),
-                                new MessageLabelInfo(
-                                        input,getComponentText(facesContext, (HtmlOutputLabel)child)));
+                        if (child.getValueExpression("value") == null)
+                        {
+                            // If the child uses a ValueExpression, do not evaluate the text
+                            // right now. When getText(FacesContext) is called, do it there.
+                            map.put(input.getClientId(facesContext),
+                                    new MessageDefferedLabelInfo(
+                                            input, child));                            
+                        }
+                        else
+                        {
+                            map.put(input.getClientId(facesContext),
+                                    new MessageTextLabelInfo(
+                                            input,getComponentText(facesContext, (HtmlOutputLabel)child)));
+                        }
                     }
                 }
             }
@@ -278,7 +290,7 @@ public class HtmlMessageRenderer
         if (text == null || text.length() < 1)
         {
             StringBuffer buf = new StringBuffer();
-            List li = component.getChildren();
+            List<UIComponent> li = component.getChildren();
 
             for (int i = 0; i < li.size(); i++)
             {
@@ -298,12 +310,18 @@ public class HtmlMessageRenderer
         return text;
     }
 
-    public static class MessageLabelInfo
+    public static interface MessageLabelInfo
     {
-        private UIComponent _forComponent;
-        private String _text;
+        public UIComponent getForComponent();
+        public String getText(FacesContext context);
+    }
+    
+    public final static class MessageTextLabelInfo implements MessageLabelInfo
+    {
+        private final UIComponent _forComponent;
+        private final String _text;
 
-        public MessageLabelInfo(UIComponent forComponent, String text)
+        public MessageTextLabelInfo(final UIComponent forComponent, final String text)
         {
             _forComponent = forComponent;
             _text = text;
@@ -314,19 +332,37 @@ public class HtmlMessageRenderer
             return _forComponent;
         }
 
-        public void setForComponent(UIComponent forComponent)
+        public String getText(FacesContext context)
+        {
+            return _text;
+        }
+    }
+    
+    public final static class MessageDefferedLabelInfo implements MessageLabelInfo
+    {
+        private final UIComponent _forComponent;
+        private final UIComponent _labelComponent;
+        private String _text;
+        
+        public MessageDefferedLabelInfo(final UIComponent forComponent, final UIComponent labelComponent)
         {
             _forComponent = forComponent;
+            _labelComponent = labelComponent;
         }
 
-        public String getText()
+        
+        public UIComponent getForComponent()
         {
-            return _text;
+            return _forComponent;
         }
 
-        public void setText(String text)
+        public String getText(FacesContext context)
         {
-            _text = text;
+            if (_text == null)
+            {
+                _text = getComponentText(context, (HtmlOutputLabel)_labelComponent); 
+            }
+            return _text; 
         }
     }
 }