Coverage Report - org.apache.myfaces.shared.renderkit.html.HtmlMessagesRendererBase
 
Classes in this File Line Coverage Branch Coverage Complexity
HtmlMessagesRendererBase
0%
0/160
0%
0/90
4.762
HtmlMessagesRendererBase$MessagesIterator
0%
0/48
0%
0/36
4.762
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *   http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing,
 13  
  * software distributed under the License is distributed on an
 14  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15  
  * KIND, either express or implied.  See the License for the
 16  
  * specific language governing permissions and limitations
 17  
  * under the License.
 18  
  */
 19  
 package org.apache.myfaces.shared.renderkit.html;
 20  
 
 21  
 import java.io.IOException;
 22  
 import java.util.Iterator;
 23  
 import java.util.List;
 24  
 import java.util.Map;
 25  
 import java.util.NoSuchElementException;
 26  
 import java.util.logging.Level;
 27  
 import java.util.logging.Logger;
 28  
 
 29  
 import javax.faces.application.FacesMessage;
 30  
 import javax.faces.component.UIComponent;
 31  
 import javax.faces.component.UIMessages;
 32  
 import javax.faces.component.UIViewRoot;
 33  
 import javax.faces.component.behavior.ClientBehavior;
 34  
 import javax.faces.component.behavior.ClientBehaviorHolder;
 35  
 import javax.faces.component.html.HtmlMessages;
 36  
 import javax.faces.context.FacesContext;
 37  
 import javax.faces.context.ResponseWriter;
 38  
 
 39  
 import org.apache.myfaces.shared.renderkit.JSFAttr;
 40  
 import org.apache.myfaces.shared.renderkit.RendererUtils;
 41  
 import org.apache.myfaces.shared.util.NullIterator;
 42  
 
 43  0
 public abstract class HtmlMessagesRendererBase
 44  
         extends HtmlMessageRendererBase
 45  
 {
 46  
     //private static final Log log = LogFactory.getLog(HtmlMessagesRendererBase.class);
 47  0
     private static final Logger log = Logger.getLogger(HtmlMessagesRendererBase.class.getName());
 48  
 
 49  
     protected static final String LAYOUT_LIST  = "list";
 50  
     protected static final String LAYOUT_TABLE = "table";
 51  
 
 52  
     protected void renderMessages(FacesContext facesContext,
 53  
                                   UIComponent messages)
 54  
             throws IOException
 55  
     {
 56  0
         renderMessages(facesContext, messages, false);
 57  0
     }
 58  
 
 59  
     protected void renderMessages(FacesContext facesContext,
 60  
             UIComponent messages, boolean alwaysRenderSpan)
 61  
             throws IOException
 62  
     {
 63  0
         renderMessages(facesContext, messages, alwaysRenderSpan, false);
 64  0
     }
 65  
 
 66  
     protected void renderMessages(FacesContext facesContext,
 67  
                                   UIComponent messages, boolean alwaysRenderSpan, 
 68  
                                   boolean renderDivWhenNoMessagesAndIdSet)
 69  
             throws IOException
 70  
     {
 71  
         // check the for attribute
 72  0
         String forAttr = getFor(messages);
 73  0
         UIComponent forComponent = null;
 74  0
         if(forAttr != null && !"".equals(forAttr))
 75  
         {
 76  0
             forComponent = messages.findComponent(forAttr);
 77  0
             if (forComponent == null)
 78  
             {
 79  0
                 log.severe("Could not render Messages. Unable to find component '"
 80  
                         + forAttr + "' (calling findComponent on component '" 
 81  
                         + messages.getClientId(facesContext)
 82  
                         + "'). If the provided id was correct, wrap the message and its "
 83  
                         + "component into an h:panelGroup or h:panelGrid.");
 84  0
                 return;
 85  
             }
 86  
         }
 87  
         
 88  0
         MessagesIterator messagesIterator = new MessagesIterator(facesContext,
 89  
                 isGlobalOnly(messages), isRedisplay(messages), forComponent);
 90  
 
 91  0
         if (messagesIterator.hasNext())
 92  
         {
 93  0
             String layout = getLayout(messages);
 94  0
             if (layout == null)
 95  
             {
 96  0
                 if (log.isLoggable(Level.FINE))
 97  
                 {
 98  0
                     log.fine("No messages layout given, using default layout 'list'.");
 99  
                 }
 100  0
                 renderList(facesContext, messages, messagesIterator);
 101  
             }
 102  0
             else if (layout.equalsIgnoreCase(LAYOUT_TABLE))
 103  
             {
 104  0
                 renderTable(facesContext, messages, messagesIterator);
 105  
             }
 106  
             else
 107  
             {
 108  0
                 if (log.isLoggable(Level.WARNING) && !layout.equalsIgnoreCase(LAYOUT_LIST))
 109  
                 {
 110  0
                     log.warning("Unsupported messages layout '" + layout + "' - using default layout 'list'.");
 111  
                 }
 112  0
                 renderList(facesContext, messages, messagesIterator);
 113  
             }
 114  0
         }
 115  
         else
 116  
         {
 117  0
             if (renderDivWhenNoMessagesAndIdSet && messages.getId() != null && 
 118  
                     !messages.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX))
 119  
             {
 120  0
                 ResponseWriter writer = facesContext.getResponseWriter();
 121  0
                 writer.startElement(HTML.DIV_ELEM, messages);
 122  0
                 writer.writeAttribute(HTML.ID_ATTR, messages.getClientId(facesContext), null);
 123  0
                 writer.endElement(HTML.DIV_ELEM);
 124  
             }
 125  
         }
 126  
         
 127  0
         if (!renderDivWhenNoMessagesAndIdSet && alwaysRenderSpan)
 128  
         {
 129  0
             Object forceSpan = messages.getAttributes().get("forceSpan");
 130  0
             boolean b = forceSpan instanceof Boolean ? (Boolean) forceSpan : Boolean.valueOf(forceSpan.toString());
 131  0
             if (b)
 132  
             {
 133  0
                 ResponseWriter writer = facesContext.getResponseWriter();
 134  
     
 135  0
                 writer.startElement(HTML.SPAN_ELEM, null);
 136  0
                 writer.writeAttribute(HTML.ID_ATTR,messages.getClientId(facesContext),null);
 137  0
                 if(messages.getAttributes().get(JSFAttr.STYLE_CLASS_ATTR)!=null)
 138  
                 {
 139  0
                     writer.writeAttribute(
 140  
                             HTML.CLASS_ATTR, messages.getAttributes().get(JSFAttr.STYLE_CLASS_ATTR), null);
 141  
                 }
 142  0
                 if(messages.getAttributes().get(JSFAttr.STYLE_ATTR)!=null)
 143  
                 {
 144  0
                     writer.writeAttribute(HTML.STYLE_ATTR, messages.getAttributes().get(JSFAttr.STYLE_ATTR), null);
 145  
                 }
 146  0
                 writer.endElement(HTML.SPAN_ELEM);
 147  
             }
 148  
         }
 149  0
     }
 150  
 
 151  
 
 152  
     private void renderList(FacesContext facesContext,
 153  
                             UIComponent messages,
 154  
                             MessagesIterator messagesIterator)
 155  
             throws IOException
 156  
     {
 157  0
         ResponseWriter writer = facesContext.getResponseWriter();
 158  
 
 159  0
         writer.startElement(HTML.UL_ELEM, messages);
 160  
 
 161  0
         Map<String, List<ClientBehavior>> behaviors = null;
 162  0
         if (messages instanceof ClientBehaviorHolder)
 163  
         {
 164  0
             behaviors = ((ClientBehaviorHolder) messages).getClientBehaviors();
 165  
         }
 166  
         
 167  0
         if (behaviors != null && !behaviors.isEmpty())
 168  
         {
 169  0
             writer.writeAttribute(HTML.ID_ATTR, messages.getClientId(facesContext), null);
 170  
         }
 171  
         else
 172  
         {
 173  0
             HtmlRendererUtils.writeIdIfNecessary(writer, messages, facesContext);
 174  
         }         
 175  0
         HtmlRendererUtils.renderHTMLAttributes(writer, messages, HTML.UNIVERSAL_ATTRIBUTES_WITHOUT_STYLE);
 176  
 
 177  0
         HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_ATTR, HTML.STYLE_ATTR, getComponentStyle(messages));
 178  0
         HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_CLASS_ATTR, HTML.STYLE_CLASS_ATTR, 
 179  
                 getComponentStyleClass(messages));
 180  
 
 181  0
         while(messagesIterator.hasNext())
 182  
         {
 183  0
             writer.startElement(org.apache.myfaces.shared.renderkit.html.HTML.LI_ELEM, null); //messages);
 184  
             
 185  0
             FacesMessage facesMessage = (FacesMessage)messagesIterator.next();
 186  
             // determine style and style class
 187  0
             String[] styleAndClass = getStyleAndStyleClass(messages, facesMessage.getSeverity());
 188  0
             String style = styleAndClass[0];
 189  0
             String styleClass = styleAndClass[1];
 190  
             
 191  0
             HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_ATTR, HTML.STYLE_ATTR, style);
 192  0
             HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_CLASS_ATTR, HTML.STYLE_CLASS_ATTR, styleClass);
 193  
             
 194  0
             renderSingleFacesMessage(facesContext,
 195  
                     messages,
 196  
                     facesMessage,
 197  
                     messagesIterator.getClientId(),false,false,false);
 198  0
             writer.endElement(HTML.LI_ELEM);
 199  0
         }
 200  
 
 201  0
         writer.endElement(HTML.UL_ELEM);
 202  0
     }
 203  
 
 204  
 
 205  
     private void renderTable(FacesContext facesContext,
 206  
                              UIComponent messages,
 207  
                              MessagesIterator messagesIterator)
 208  
             throws IOException
 209  
     {
 210  0
         ResponseWriter writer = facesContext.getResponseWriter();
 211  
 
 212  0
         writer.startElement(HTML.TABLE_ELEM, messages);
 213  
         
 214  0
         Map<String, List<ClientBehavior>> behaviors = null;
 215  0
         if (messages instanceof ClientBehaviorHolder)
 216  
         {
 217  0
             behaviors = ((ClientBehaviorHolder) messages).getClientBehaviors();
 218  
         }
 219  
         
 220  0
         if (behaviors != null && !behaviors.isEmpty())
 221  
         {
 222  0
             writer.writeAttribute(HTML.ID_ATTR, messages.getClientId(facesContext), null);
 223  
         }
 224  
         else
 225  
         {
 226  0
             HtmlRendererUtils.writeIdIfNecessary(writer, messages, facesContext);
 227  
         }         
 228  0
         HtmlRendererUtils.renderHTMLAttributes(writer, messages, HTML.UNIVERSAL_ATTRIBUTES_WITHOUT_STYLE);
 229  
         
 230  0
         HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_ATTR, HTML.STYLE_ATTR, getComponentStyle(messages));
 231  0
         HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_CLASS_ATTR, HTML.STYLE_CLASS_ATTR, 
 232  
                 getComponentStyleClass(messages));
 233  
         
 234  0
         while(messagesIterator.hasNext())
 235  
         {
 236  0
             writer.startElement(HTML.TR_ELEM, null); // messages);
 237  0
             writer.startElement(HTML.TD_ELEM, null); // messages);
 238  
             
 239  0
             FacesMessage facesMessage = (FacesMessage)messagesIterator.next();
 240  
             // determine style and style class
 241  0
             String[] styleAndClass = getStyleAndStyleClass(messages, facesMessage.getSeverity());
 242  0
             String style = styleAndClass[0];
 243  0
             String styleClass = styleAndClass[1];
 244  
             
 245  0
             HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_ATTR, HTML.STYLE_ATTR, style);
 246  0
             HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_CLASS_ATTR, HTML.STYLE_CLASS_ATTR, styleClass);
 247  
             
 248  0
             renderSingleFacesMessage(facesContext,
 249  
                     messages,
 250  
                     facesMessage,
 251  
                     messagesIterator.getClientId(),false,false,false);
 252  
 
 253  0
             writer.endElement(HTML.TD_ELEM);
 254  0
             writer.endElement(HTML.TR_ELEM);
 255  0
         }
 256  
 
 257  0
         writer.endElement(HTML.TABLE_ELEM);
 258  0
     }
 259  
 
 260  
 
 261  
     public static String[] getStyleAndStyleClass(UIComponent messages,
 262  
                                              FacesMessage.Severity severity)
 263  
     {
 264  0
         String style = null;
 265  0
         String styleClass = null;
 266  0
         if (messages instanceof HtmlMessages)
 267  
         {
 268  0
             if (severity == FacesMessage.SEVERITY_INFO)
 269  
             {
 270  0
                 style = ((HtmlMessages)messages).getInfoStyle();
 271  0
                 styleClass = ((HtmlMessages)messages).getInfoClass();
 272  
             }
 273  0
             else if (severity == FacesMessage.SEVERITY_WARN)
 274  
             {
 275  0
                 style = ((HtmlMessages)messages).getWarnStyle();
 276  0
                 styleClass = ((HtmlMessages)messages).getWarnClass();
 277  
             }
 278  0
             else if (severity == FacesMessage.SEVERITY_ERROR)
 279  
             {
 280  0
                 style = ((HtmlMessages)messages).getErrorStyle();
 281  0
                 styleClass = ((HtmlMessages)messages).getErrorClass();
 282  
             }
 283  0
             else if (severity == FacesMessage.SEVERITY_FATAL)
 284  
             {
 285  0
                 style = ((HtmlMessages)messages).getFatalStyle();
 286  0
                 styleClass = ((HtmlMessages)messages).getFatalClass();
 287  
             }
 288  
 
 289  
             //if (style == null)
 290  
             //{
 291  
             //    style = ((HtmlMessages)messages).getStyle();
 292  
             //}
 293  
 
 294  
             //if (styleClass == null)
 295  
             //{
 296  
             //    styleClass = ((HtmlMessages)messages).getStyleClass();
 297  
             //}
 298  
         }
 299  
         else
 300  
         {
 301  0
             Map attr = messages.getAttributes();
 302  0
             if (severity == FacesMessage.SEVERITY_INFO)
 303  
             {
 304  0
                 style = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.INFO_STYLE_ATTR);
 305  0
                 styleClass = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.INFO_CLASS_ATTR);
 306  
             }
 307  0
             else if (severity == FacesMessage.SEVERITY_WARN)
 308  
             {
 309  0
                 style = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.WARN_STYLE_ATTR);
 310  0
                 styleClass = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.WARN_CLASS_ATTR);
 311  
             }
 312  0
             else if (severity == FacesMessage.SEVERITY_ERROR)
 313  
             {
 314  0
                 style = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.ERROR_STYLE_ATTR);
 315  0
                 styleClass = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.ERROR_CLASS_ATTR);
 316  
             }
 317  0
             else if (severity == FacesMessage.SEVERITY_FATAL)
 318  
             {
 319  0
                 style = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.FATAL_STYLE_ATTR);
 320  0
                 styleClass = (String)attr.get(JSFAttr.FATAL_CLASS_ATTR);
 321  
             }
 322  
 
 323  
             //if (style == null)
 324  
             //{
 325  
             //    style = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.STYLE_ATTR);
 326  
             //}
 327  
 
 328  
             //if (styleClass == null)
 329  
             //{
 330  
             //    styleClass = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.STYLE_CLASS_ATTR);
 331  
             //}
 332  
         }
 333  
 
 334  0
         return new String[] {style, styleClass};
 335  
     }
 336  
     
 337  
     protected String getComponentStyleClass(UIComponent messages)
 338  
     {
 339  0
         String styleClass = null;
 340  0
         if (messages instanceof HtmlMessages)
 341  
         {
 342  0
             styleClass = ((HtmlMessages)messages).getStyleClass();
 343  
         }
 344  
         else
 345  
         {
 346  0
             Map attr = messages.getAttributes();
 347  0
             styleClass = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.STYLE_CLASS_ATTR);
 348  
         }
 349  0
         return styleClass;
 350  
     }
 351  
     
 352  
     protected String getComponentStyle(UIComponent messages)
 353  
     {
 354  0
         String style = null;
 355  0
         if (messages instanceof HtmlMessages)
 356  
         {
 357  0
             style = ((HtmlMessages)messages).getStyle();
 358  
         }
 359  
         else
 360  
         {
 361  0
             Map attr = messages.getAttributes();
 362  0
             style = (String)attr.get(org.apache.myfaces.shared.renderkit.JSFAttr.STYLE_ATTR);
 363  
         }
 364  0
         return style;
 365  
     }
 366  
 
 367  
     protected String getTitle(UIComponent component)
 368  
     {
 369  0
         if (component instanceof HtmlMessages)
 370  
         {
 371  0
             return ((HtmlMessages)component).getTitle();
 372  
         }
 373  
         else
 374  
         {
 375  0
             return (String)component.getAttributes().get(org.apache.myfaces.shared.renderkit.JSFAttr.TITLE_ATTR);
 376  
         }
 377  
     }
 378  
 
 379  
     protected boolean isTooltip(UIComponent component)
 380  
     {
 381  0
         if (component instanceof HtmlMessages)
 382  
         {
 383  0
             return ((HtmlMessages)component).isTooltip();
 384  
         }
 385  
         else
 386  
         {
 387  0
             return org.apache.myfaces.shared.renderkit.RendererUtils.getBooleanAttribute(component, 
 388  
                     org.apache.myfaces.shared.renderkit.JSFAttr.TOOLTIP_ATTR, false);
 389  
         }
 390  
     }
 391  
 
 392  
     protected boolean isShowSummary(UIComponent component)
 393  
     {
 394  0
         if (component instanceof UIMessages)
 395  
         {
 396  0
             return ((UIMessages)component).isShowSummary();
 397  
         }
 398  
         else
 399  
         {
 400  0
             return RendererUtils.getBooleanAttribute(component, JSFAttr.SHOW_SUMMARY_ATTR, false);
 401  
         }
 402  
     }
 403  
 
 404  
     protected boolean isShowDetail(UIComponent component)
 405  
     {
 406  0
         if (component instanceof UIMessages)
 407  
         {
 408  0
             return ((UIMessages)component).isShowDetail();
 409  
         }
 410  
         else
 411  
         {
 412  0
             return org.apache.myfaces.shared.renderkit.RendererUtils.getBooleanAttribute(
 413  
                     component, JSFAttr.SHOW_DETAIL_ATTR, false);
 414  
         }
 415  
     }
 416  
 
 417  
     protected boolean isGlobalOnly(UIComponent component)
 418  
     {
 419  0
         if (component instanceof UIMessages)
 420  
         {
 421  0
             return ((UIMessages)component).isGlobalOnly();
 422  
         }
 423  
         else
 424  
         {
 425  0
             return org.apache.myfaces.shared.renderkit.RendererUtils.getBooleanAttribute(
 426  
                     component, JSFAttr.GLOBAL_ONLY_ATTR, false);
 427  
         }
 428  
     }
 429  
 
 430  
     protected String getLayout(UIComponent component)
 431  
     {
 432  0
         if (component instanceof HtmlMessages)
 433  
         {
 434  0
             return ((HtmlMessages)component).getLayout();
 435  
         }
 436  
         else
 437  
         {
 438  0
             return (String)component.getAttributes().get(JSFAttr.LAYOUT_ATTR);
 439  
         }
 440  
     }
 441  
     
 442  
     protected String getFor(UIComponent component)
 443  
     {
 444  0
         if (component instanceof UIMessages)
 445  
         {
 446  0
             return ((UIMessages) component).getFor();
 447  
         }
 448  
  
 449  0
         return (String) component.getAttributes().get(JSFAttr.FOR_ATTR); 
 450  
     }
 451  
 
 452  
     protected boolean isRedisplay(UIComponent component)
 453  
     {
 454  0
         if (component instanceof UIMessages)
 455  
         {
 456  0
             return ((UIMessages) component).isRedisplay();
 457  
         }
 458  
 
 459  0
         return org.apache.myfaces.shared.renderkit.RendererUtils.getBooleanAttribute(
 460  
                 component, org.apache.myfaces.shared.renderkit.JSFAttr.REDISPLAY_ATTR, true);
 461  
         
 462  
     }
 463  
 
 464  0
     private static class MessagesIterator implements Iterator
 465  
     {
 466  
         private FacesContext _facesContext;
 467  
         private Iterator _globalMessagesIterator;
 468  
         private Iterator _clientIdsWithMessagesIterator;
 469  0
         private Iterator _componentMessagesIterator = null;
 470  0
         private String _clientId = null;
 471  
         private boolean _redisplay;
 472  
         private Object _next;
 473  
 
 474  
         public MessagesIterator(FacesContext facesContext, boolean globalOnly, boolean redisplay,
 475  
                 UIComponent forComponent)
 476  0
         {
 477  0
             _facesContext = facesContext;
 478  
             // The for attribute is mutually exclusive with globalOnly and take precedence if used.
 479  0
             if(forComponent != null)
 480  
             {
 481  0
                 _clientId = forComponent.getClientId(facesContext);
 482  0
                 _componentMessagesIterator = facesContext.getMessages(_clientId);
 483  0
                 _globalMessagesIterator = org.apache.myfaces.shared.util.NullIterator.instance();
 484  0
                 _clientIdsWithMessagesIterator = org.apache.myfaces.shared.util.NullIterator.instance();
 485  
             }
 486  
             else 
 487  
             {
 488  0
                 if (globalOnly)
 489  
                 {
 490  0
                     _globalMessagesIterator = facesContext.getMessages(null);
 491  0
                     _clientIdsWithMessagesIterator = NullIterator.instance();
 492  
                 }
 493  
                 else
 494  
                 {
 495  0
                     _globalMessagesIterator = org.apache.myfaces.shared.util.NullIterator.instance();
 496  0
                     _clientIdsWithMessagesIterator = facesContext.getClientIdsWithMessages();
 497  
                 }
 498  0
                 _componentMessagesIterator = null;
 499  0
                 _clientId = null;
 500  
             }
 501  
             
 502  0
             _redisplay = redisplay;
 503  0
             _next = null;
 504  0
         }
 505  
 
 506  
         public boolean hasNext()
 507  
         {
 508  0
             if(_next != null)
 509  
             {
 510  0
                 return true;
 511  
             }
 512  0
             if(_globalMessagesIterator.hasNext()) 
 513  
             {
 514  
                 do
 515  
                 {
 516  0
                     _next = _globalMessagesIterator.next();
 517  0
                     if(_redisplay || !((FacesMessage)_next).isRendered())
 518  
                     {
 519  0
                         return true;
 520  
                     }
 521  
                 }
 522  0
                 while(_globalMessagesIterator.hasNext());
 523  
             }
 524  0
             if(_componentMessagesIterator != null && _componentMessagesIterator.hasNext()) 
 525  
             {
 526  
                 do
 527  
                 {
 528  0
                     _next = _componentMessagesIterator.next();
 529  0
                     if(_redisplay || !((FacesMessage)_next).isRendered())
 530  
                     {
 531  0
                         return true;
 532  
                     }
 533  
                 }
 534  0
                 while(_componentMessagesIterator.hasNext());
 535  
             }
 536  0
             if(_clientIdsWithMessagesIterator.hasNext()) 
 537  
             {
 538  
                 do
 539  
                 {
 540  0
                     _clientId = (String) _clientIdsWithMessagesIterator.next();
 541  0
                     _componentMessagesIterator = _facesContext.getMessages(_clientId);
 542  0
                     while(_componentMessagesIterator.hasNext()) 
 543  
                     {
 544  0
                         _next = _componentMessagesIterator.next();
 545  0
                         if(_redisplay || !((FacesMessage)_next).isRendered())
 546  
                         {
 547  0
                             return true;
 548  
                         }
 549  
                     }
 550  
                 }
 551  0
                 while(_clientIdsWithMessagesIterator.hasNext());
 552  
                 
 553  
             }
 554  0
             _next = null;
 555  0
             return false;
 556  
         }
 557  
 
 558  
         public Object next()
 559  
         {
 560  0
             if(this.hasNext()) 
 561  
             {
 562  0
                 Object ret = _next;
 563  0
                 _next = null;
 564  0
                 return ret;
 565  
             }
 566  0
             throw new NoSuchElementException();
 567  
         }
 568  
 
 569  
         public void remove()
 570  
         {
 571  0
             throw new UnsupportedOperationException(this.getClass().getName() + " UnsupportedOperationException");
 572  
         }
 573  
 
 574  
         public String getClientId()
 575  
         {
 576  0
             return _clientId;
 577  
         }
 578  
     }
 579  
 
 580  
 }