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 2009/09/24 04:34:54 UTC
svn commit: r818350 - in
/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html:
HtmlMessageRendererBase.java HtmlMessagesRendererBase.java
Author: lu4242
Date: Thu Sep 24 02:34:53 2009
New Revision: 818350
URL: http://svn.apache.org/viewvc?rev=818350&view=rev
Log:
MYFACES-2275 UIMessages.getFor (Filter messages of a selected component) (Thanks to Jakob Korherr for provide this patch)
Modified:
myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java
myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java
Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java?rev=818350&r1=818349&r2=818350&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java Thu Sep 24 02:34:53 2009
@@ -166,7 +166,8 @@
behaviors = ((ClientBehaviorHolder) message).getClientBehaviors();
}
- if (message.getId() != null && (!message.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX) || !behaviors.isEmpty()))
+ if (message.getId() != null && (!message.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX)
+ || (behaviors != null && !behaviors.isEmpty())))
{
span = true;
Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java?rev=818350&r1=818349&r2=818350&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java Thu Sep 24 02:34:53 2009
@@ -18,11 +18,10 @@
*/
package org.apache.myfaces.shared.renderkit.html;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.shared.renderkit.JSFAttr;
-import org.apache.myfaces.shared.renderkit.RendererUtils;
-import org.apache.myfaces.shared.util.NullIterator;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
@@ -30,9 +29,12 @@
import javax.faces.component.html.HtmlMessages;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.shared.renderkit.JSFAttr;
+import org.apache.myfaces.shared.renderkit.RendererUtils;
+import org.apache.myfaces.shared.util.NullIterator;
/**
* @author Manfred Geiler (latest modification by $Author$)
@@ -51,8 +53,21 @@
UIComponent messages)
throws IOException
{
+ // check the for attribute
+ String forAttr = getFor(messages);
+ UIComponent forComponent = null;
+ if(forAttr != null && !"".equals(forAttr))
+ {
+ forComponent = messages.findComponent(forAttr);
+ if (forComponent == null)
+ {
+ log.error("Could not render Messages. Unable to find component '" + forAttr + "' (calling findComponent on component '" + messages.getClientId(facesContext) + "'). If the provided id was correct, wrap the message and its component into an h:panelGroup or h:panelGrid.");
+ return;
+ }
+ }
+
MessagesIterator messagesIterator = new MessagesIterator(facesContext,
- isGlobalOnly(messages));
+ isGlobalOnly(messages), forComponent);
if (messagesIterator.hasNext())
{
@@ -337,8 +352,16 @@
return (String)component.getAttributes().get(JSFAttr.LAYOUT_ATTR);
}
}
-
-
+
+ protected String getFor(UIComponent component)
+ {
+ if (component instanceof UIMessages)
+ {
+ return ((UIMessages) component).getFor();
+ }
+
+ return (String) component.getAttributes().get(JSFAttr.FOR_ATTR);
+ }
private static class MessagesIterator implements Iterator
{
@@ -348,21 +371,32 @@
private Iterator _componentMessagesIterator = null;
private String _clientId = null;
- public MessagesIterator(FacesContext facesContext, boolean globalOnly)
+ public MessagesIterator(FacesContext facesContext, boolean globalOnly, UIComponent forComponent)
{
_facesContext = facesContext;
- if (globalOnly)
+ // The for attribute is mutually exclusive with globalOnly and take precedence if used.
+ if(forComponent != null)
{
- _globalMessagesIterator = facesContext.getMessages(null);
- _clientIdsWithMessagesIterator = NullIterator.instance();
+ _clientId = forComponent.getClientId();
+ _componentMessagesIterator = facesContext.getMessages(_clientId);
+ _globalMessagesIterator = org.apache.myfaces.shared.util.NullIterator.instance();
+ _clientIdsWithMessagesIterator = org.apache.myfaces.shared.util.NullIterator.instance();
}
- else
+ else
{
- _globalMessagesIterator = org.apache.myfaces.shared.util.NullIterator.instance();
- _clientIdsWithMessagesIterator = facesContext.getClientIdsWithMessages();
+ if (globalOnly)
+ {
+ _globalMessagesIterator = facesContext.getMessages(null);
+ _clientIdsWithMessagesIterator = NullIterator.instance();
+ }
+ else
+ {
+ _globalMessagesIterator = org.apache.myfaces.shared.util.NullIterator.instance();
+ _clientIdsWithMessagesIterator = facesContext.getClientIdsWithMessages();
+ }
+ _componentMessagesIterator = null;
+ _clientId = null;
}
- _componentMessagesIterator = null;
- _clientId = null;
}
public boolean hasNext()
@@ -382,12 +416,13 @@
{
return _componentMessagesIterator.next();
}
- else
+ else if(_clientIdsWithMessagesIterator.hasNext())
{
_clientId = (String)_clientIdsWithMessagesIterator.next();
_componentMessagesIterator = _facesContext.getMessages(_clientId);
return _componentMessagesIterator.next();
}
+ throw new NoSuchElementException();
}
public void remove()