001    package org.apache.tapestry.scriptaculous;
002    
003    import org.apache.tapestry.IMarkupWriter;
004    import org.apache.tapestry.IRequestCycle;
005    
006    import java.util.Iterator;
007    
008    /**
009     * Default implementation of {@link ListItemRenderer}. Simply displays
010     * the values of each object supplied by invoking toString(). Other more
011     * advanced renderers may add html content to the <code>&lt;li&gt;</code> elements or
012     * similarly advanced UI displays.
013     */
014    public class DefaultListItemRenderer implements ListItemRenderer {
015    
016        /**
017         * Shared global instance default used by {@link Suggest} when no custom renderer
018         * is specified.
019         */
020        public static final ListItemRenderer SHARED_INSTANCE = new DefaultListItemRenderer();
021    
022        /**
023         * {@inheritDoc}
024         */
025        public void renderList(IMarkupWriter writer, IRequestCycle cycle, Iterator values)
026        {
027            if (cycle.isRewinding())
028                return;
029    
030            writer.begin("ul");
031            
032            while (values.hasNext())
033            {
034                Object value = values.next();
035                
036                if (value == null)
037                    continue;
038    
039                writer.begin("li");
040                writer.print(value.toString());
041                writer.end("li");
042            }
043    
044            writer.end();
045        }
046    }