You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by sa...@apache.org on 2010/06/23 17:10:17 UTC

svn commit: r957241 - in /click/trunk/examples/click-bench: build.xml jmeter/benchmark.jmx lib/clickclick-core-0.3.jar src/benchmark/click/repeater/ src/benchmark/click/repeater/CustomerList.java web/click/repeater/ web/click/repeater/customer-list.htm

Author: sabob
Date: Wed Jun 23 15:10:16 2010
New Revision: 957241

URL: http://svn.apache.org/viewvc?rev=957241&view=rev
Log:
included a repeater test

Added:
    click/trunk/examples/click-bench/lib/clickclick-core-0.3.jar   (with props)
    click/trunk/examples/click-bench/src/benchmark/click/repeater/
    click/trunk/examples/click-bench/src/benchmark/click/repeater/CustomerList.java
    click/trunk/examples/click-bench/web/click/repeater/
    click/trunk/examples/click-bench/web/click/repeater/customer-list.htm
Modified:
    click/trunk/examples/click-bench/build.xml
    click/trunk/examples/click-bench/jmeter/benchmark.jmx

Modified: click/trunk/examples/click-bench/build.xml
URL: http://svn.apache.org/viewvc/click/trunk/examples/click-bench/build.xml?rev=957241&r1=957240&r2=957241&view=diff
==============================================================================
--- click/trunk/examples/click-bench/build.xml (original)
+++ click/trunk/examples/click-bench/build.xml Wed Jun 23 15:10:16 2010
@@ -21,7 +21,7 @@
 <project name="click-bench" default="compile" basedir=".">
     <description>Builds, tests, and runs the project click-bench.</description>
 
-    <property name="click.version" value="2.0.1-RC1-incubator"/>
+    <property name="click.version" value="2.3.0-M1"/>
     <property name="name" value="click-bench"/>
     <property name="build.dir" value="build"/>
     <property name="build.web.dir" value="${build.dir}/web"/>

Modified: click/trunk/examples/click-bench/jmeter/benchmark.jmx
URL: http://svn.apache.org/viewvc/click/trunk/examples/click-bench/jmeter/benchmark.jmx?rev=957241&r1=957240&r2=957241&view=diff
==============================================================================
--- click/trunk/examples/click-bench/jmeter/benchmark.jmx (original)
+++ click/trunk/examples/click-bench/jmeter/benchmark.jmx Wed Jun 23 15:10:16 2010
@@ -31,7 +31,9 @@
             <collectionProp name="Arguments.arguments"/>
           </elementProp>
           <stringProp name="HTTPSampler.domain">localhost</stringProp>
-          <stringProp name="HTTPSampler.port">8080</stringProp>
+          <stringProp name="HTTPSampler.port">9999</stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
           <stringProp name="HTTPSampler.path"></stringProp>
@@ -55,6 +57,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/wicket-session</stringProp>
@@ -66,7 +70,7 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
@@ -85,6 +89,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/wicket-session/?wicket:bookmarkablePage=wicket-5%3Abenchmark.wicket.AddCustomer</stringProp>
@@ -96,7 +102,7 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
@@ -106,7 +112,7 @@
         <hashTree>
           <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
             <boolProp name="LoopController.continue_forever">true</boolProp>
-            <stringProp name="LoopController.loops">400</stringProp>
+            <stringProp name="LoopController.loops">100</stringProp>
           </LoopController>
           <hashTree>
             <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="HTTP Request" enabled="true">
@@ -115,6 +121,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/click/pages/customer-list.htm</stringProp>
@@ -126,7 +134,7 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
@@ -145,6 +153,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/click/container/customer-list.htm</stringProp>
@@ -156,7 +166,39 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
+              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+            </HTTPSampler>
+            <hashTree/>
+          </hashTree>
+        </hashTree>
+        <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="CLICK Container Repeater" enabled="false"/>
+        <hashTree>
+          <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+            <boolProp name="LoopController.continue_forever">true</boolProp>
+            <stringProp name="LoopController.loops">400</stringProp>
+          </LoopController>
+          <hashTree>
+            <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="HTTP Request" enabled="true">
+              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+                <collectionProp name="Arguments.arguments"/>
+              </elementProp>
+              <stringProp name="HTTPSampler.domain"></stringProp>
+              <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
+              <stringProp name="HTTPSampler.protocol"></stringProp>
+              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+              <stringProp name="HTTPSampler.path">/click-bench/click/repeater/customer-list.htm</stringProp>
+              <stringProp name="HTTPSampler.method">GET</stringProp>
+              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+              <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
+              <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
+              <stringProp name="HTTPSampler.mimetype"></stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
@@ -175,6 +217,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/click/pages/add-customer.htm</stringProp>
@@ -186,7 +230,7 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
@@ -205,6 +249,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/click/velocity/velocity-customer-list.htm</stringProp>
@@ -216,7 +262,7 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
@@ -235,6 +281,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/click/jsp/jsp-customer-list.htm</stringProp>
@@ -246,7 +294,7 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
@@ -265,6 +313,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/jsp/direct-jsp.jsp</stringProp>
@@ -276,7 +326,7 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
@@ -286,7 +336,7 @@
         <hashTree>
           <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
             <boolProp name="LoopController.continue_forever">true</boolProp>
-            <stringProp name="LoopController.loops">400</stringProp>
+            <stringProp name="LoopController.loops">100</stringProp>
           </LoopController>
           <hashTree>
             <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="HTTP Request" enabled="true">
@@ -295,6 +345,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/customer-list.do</stringProp>
@@ -306,7 +358,7 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
@@ -316,7 +368,7 @@
         <hashTree>
           <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
             <boolProp name="LoopController.continue_forever">true</boolProp>
-            <stringProp name="LoopController.loops">400</stringProp>
+            <stringProp name="LoopController.loops">100</stringProp>
           </LoopController>
           <hashTree>
             <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="HTTP Request" enabled="true">
@@ -325,6 +377,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/tapestry/customerlist</stringProp>
@@ -336,7 +390,7 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
@@ -346,7 +400,7 @@
         <hashTree>
           <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
             <boolProp name="LoopController.continue_forever">true</boolProp>
-            <stringProp name="LoopController.loops">400</stringProp>
+            <stringProp name="LoopController.loops">100</stringProp>
           </LoopController>
           <hashTree>
             <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="HTTP Request" enabled="true">
@@ -355,6 +409,8 @@
               </elementProp>
               <stringProp name="HTTPSampler.domain"></stringProp>
               <stringProp name="HTTPSampler.port"></stringProp>
+              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+              <stringProp name="HTTPSampler.response_timeout"></stringProp>
               <stringProp name="HTTPSampler.protocol"></stringProp>
               <stringProp name="HTTPSampler.contentEncoding"></stringProp>
               <stringProp name="HTTPSampler.path">/click-bench/CustomerList.action</stringProp>
@@ -366,12 +422,44 @@
               <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
               <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
               <stringProp name="HTTPSampler.mimetype"></stringProp>
-              <stringProp name="HTTPSampler.monitor">false</stringProp>
+              <boolProp name="HTTPSampler.monitor">false</boolProp>
               <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
             </HTTPSampler>
             <hashTree/>
           </hashTree>
         </hashTree>
+        <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true">
+          <boolProp name="ResultCollector.error_logging">false</boolProp>
+          <objProp>
+            <name>saveConfig</name>
+            <value class="SampleSaveConfiguration">
+              <time>true</time>
+              <latency>true</latency>
+              <timestamp>true</timestamp>
+              <success>true</success>
+              <label>true</label>
+              <code>true</code>
+              <message>true</message>
+              <threadName>true</threadName>
+              <dataType>true</dataType>
+              <encoding>false</encoding>
+              <assertions>true</assertions>
+              <subresults>true</subresults>
+              <responseData>false</responseData>
+              <samplerData>false</samplerData>
+              <xml>true</xml>
+              <fieldNames>false</fieldNames>
+              <responseHeaders>false</responseHeaders>
+              <requestHeaders>false</requestHeaders>
+              <responseDataOnError>false</responseDataOnError>
+              <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
+              <assertionsResultsToSave>0</assertionsResultsToSave>
+              <bytes>true</bytes>
+            </value>
+          </objProp>
+          <stringProp name="filename"></stringProp>
+        </ResultCollector>
+        <hashTree/>
       </hashTree>
     </hashTree>
   </hashTree>

Added: click/trunk/examples/click-bench/lib/clickclick-core-0.3.jar
URL: http://svn.apache.org/viewvc/click/trunk/examples/click-bench/lib/clickclick-core-0.3.jar?rev=957241&view=auto
==============================================================================
Binary file - no diff available.

Propchange: click/trunk/examples/click-bench/lib/clickclick-core-0.3.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: click/trunk/examples/click-bench/src/benchmark/click/repeater/CustomerList.java
URL: http://svn.apache.org/viewvc/click/trunk/examples/click-bench/src/benchmark/click/repeater/CustomerList.java?rev=957241&view=auto
==============================================================================
--- click/trunk/examples/click-bench/src/benchmark/click/repeater/CustomerList.java (added)
+++ click/trunk/examples/click-bench/src/benchmark/click/repeater/CustomerList.java Wed Jun 23 15:10:16 2010
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package benchmark.click.repeater;
+
+import benchmark.click.pages.EditCustomer;
+import org.apache.click.Page;
+
+import benchmark.dao.CustomerDao;
+import benchmark.dao.Customer;
+import java.text.SimpleDateFormat;
+import java.util.List;
+import net.sf.clickclick.control.html.table.Cell;
+import net.sf.clickclick.control.html.table.HtmlTable;
+import net.sf.clickclick.control.html.table.Row;
+import net.sf.clickclick.control.html.table.TableBody;
+import net.sf.clickclick.control.html.table.TableHeader;
+import net.sf.clickclick.control.repeater.Repeater;
+import net.sf.clickclick.control.repeater.RepeaterRow;
+import org.apache.click.ActionListener;
+import org.apache.click.Control;
+import org.apache.click.control.AbstractContainer;
+import org.apache.click.control.ActionLink;
+import org.apache.click.control.Container;
+import org.apache.click.dataprovider.DataProvider;
+import org.apache.click.util.HtmlStringBuffer;
+
+// 427 l
+// 399 dp with index remove index
+// 470 l
+// 440 dp with index remove index
+// 
+public class CustomerList extends Page {
+
+    private HtmlTable table;
+
+    private ActionLink editLink = new ActionLink("Edit", this, "onEditClick");
+
+    private ActionLink deleteLink = new ActionLink("Delete", this, "onDeleteClick");
+
+    private final SimpleDateFormat FORMAT = new SimpleDateFormat("MMMM d, yyyy");
+
+    public CustomerList() {
+        table = new HtmlTable("table");
+        table.addStyleClass("decorated");
+
+        addControl(table);
+        addControl(editLink);
+        addControl(deleteLink);
+
+        editLink.setActionListener(new ActionListener() {
+
+            public boolean onAction(Control source) {
+                Integer id = editLink.getValueInteger();
+                Customer customer = CustomerDao.getInstance().findById(id);
+                EditCustomer editPage = getContext().createPage(EditCustomer.class);
+                editPage.setCustomer(customer);
+                setForward(editPage);
+                return true;
+            }
+        });
+
+        deleteLink.setActionListener(new ActionListener() {
+
+            public boolean onAction(Control source) {
+                Integer id = deleteLink.getValueInteger();
+                Customer customer = CustomerDao.getInstance().findById(id);
+                CustomerDao.getInstance().delete(customer);
+                setRedirect(CustomerList.class);
+                return false;
+            }
+        });
+
+        TableHeader header = new TableHeader();
+        header.setColumns("First Name", "Last Name", "State", "Birth Date", "Options");
+        table.add(header);
+
+        TableBody body = new TableBody();
+        table.add(body);
+
+        Repeater repeater = new Repeater() {
+             public void buildRow(final Object item, final RepeaterRow row, final int index) {
+                final Customer customer = (Customer) item;
+
+                Row tableRow = new Row();
+                tableRow.add(customer.getFirstName(),
+                        customer.getLastName(),
+                        customer.getState(),
+                        FORMAT.format(customer.getBirthDate()));
+
+                Cell actions = new Cell();
+
+                final AbstractContainer editLinkWrapper = new AbstractContainer("Edit") {
+
+                    @Override
+                    public void render(HtmlStringBuffer buffer) {
+                        editLink.setValueObject(customer.getId());
+                        editLink.render(buffer);
+                    }
+                };
+
+                final Container deleteLinkWrapper = new AbstractContainer("Delete") {
+
+                    @Override
+                    public void render(HtmlStringBuffer buffer) {
+                        deleteLink.setValueObject(customer.getId());
+                        deleteLink.render(buffer);
+                    }
+                };
+
+                actions.add(editLinkWrapper);
+                actions.setText(" | ");
+                actions.add(deleteLinkWrapper);
+                tableRow.add(actions);
+
+                row.add(tableRow);
+            }
+        };
+
+        repeater.setDataProvider(new DataProvider() {
+            public List<Customer> getData() {
+                return CustomerDao.getInstance().findAll();
+            }
+        });
+
+        /*
+        List<Customer> customers = CustomerDao.getInstance().findAll();
+        repeater.setItems(customers);*/
+
+        body.add(repeater);
+    }
+}

Added: click/trunk/examples/click-bench/web/click/repeater/customer-list.htm
URL: http://svn.apache.org/viewvc/click/trunk/examples/click-bench/web/click/repeater/customer-list.htm?rev=957241&view=auto
==============================================================================
--- click/trunk/examples/click-bench/web/click/repeater/customer-list.htm (added)
+++ click/trunk/examples/click-bench/web/click/repeater/customer-list.htm Wed Jun 23 15:10:16 2010
@@ -0,0 +1,10 @@
+<html>
+  <head>
+    <title>Customer List</title>
+    <link rel="stylesheet" type="text/css" href="$context/styles/default.css"/>
+  </head>
+  <body>
+    <h1>Customer List</h1>
+    $table
+    </body>
+</html>
\ No newline at end of file