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;
}
}
}