struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lukaszlen...@apache.org
Subject [13/20] Moves showcase related JSPs under WEB-INF
Date Thu, 06 Mar 2014 21:36:23 GMT
http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/index.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/index.jsp
new file mode 100644
index 0000000..8791fa3
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/index.jsp
@@ -0,0 +1,24 @@
+<html>
+<head><title>AJAX Examples</title></head>
+
+<body>
+
+<h1>AJAX Example</h1>
+
+<p>
+Note: The Ajax tags are experimental. These examples have only been tested under FireFox 1.5 and IE 6.
+</p>
+
+<ul>
+    <li><a href="bind/index.jsp">Bind tag</a></li>
+    <li><a href="autocompleter/index.jsp">Autocompleter combobox tag</a></li>
+    <li><a href="remotebutton/index.jsp">Remote button tag</a></li>
+    <li><a href="remotediv/index.jsp">Remote div tag</a></li>
+    <li><a href="remotelink/index.jsp">Remote link tag</a></li>
+    <li><a href="tabbedpanel/index.jsp">Tabbed panel</a></li>
+    <li><a href="remoteforms/index.jsp">Remote forms</a></li>
+    <li><a href="widgets/index.jsp">Widgets </a> (may not work in all browsers!) 
+        see the <a href="http://www.dojotoolkit.org">dojo website</a> for more information</li>
+</ul>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/options.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/options.ftl b/apps/showcase/src/main/webapp/WEB-INF/ajax/options.ftl
new file mode 100644
index 0000000..d12ad6d
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/options.ftl
@@ -0,0 +1,5 @@
+[
+<#list options as option>
+	["${option?html}"],
+</#list>
+]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotebutton/index.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotebutton/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotebutton/index.jsp
new file mode 100644
index 0000000..b8486ae
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotebutton/index.jsp
@@ -0,0 +1,70 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsplude.jsp"/>
+</head>
+
+<script type="text/javascript">
+   function before() {alert("before request");}
+   function after() {alert("after request");}
+   function handler(widget, node) {
+     alert('I will handle this myself!');
+     dojo.byId(widget.targetsArray[0]).innerHTML = "Done";
+   }
+
+    dojo.event.topic.subscribe("/alltopics", function(data, type, e){
+      alert('inside a topic event. type='+type);
+      //data : text returned
+      //type : "before", "load" or "error"
+      //e    : request object
+   });
+</script>
+
+<body>
+
+<div id="t1">Div 1</div>
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+
+<br/><br/>
+
+A submit button, that highlights (blue color) its targets
+<sx:submit type="submit" value="submit" targets="t1" href="%{ajaxTest}" highlightColor="blue"/>
+
+<br/><br/>
+
+A submit button, with an indicator
+<img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" alt="Loading..." style="display:none"/>
+<sx:submit id="submit2" type="submit" value="submit" targets="t1" href="%{ajaxTest}" indicator="indicator"/>
+
+<br/><br/>
+
+A submit button, with "notifyTopics"
+<sx:submit type="submit" value="submit" targets="t1" href="%{ajaxTest}" notifyTopics="/alltopics"/>
+
+<br/><br/>
+
+Use an image as submit
+<s:url value="/images/struts-power.gif" var="imgUrl" />
+<sx:submit type="image" label="Alt Text" targets="t1"
+  src="%{imgUrl}" href="%{ajaxTest}" />
+<br/><br/>
+
+<label for="textInput">Text to be echoed</label>
+<br/><br/>
+
+Use a button as submit (custom text)
+<s:form id="form" action="AjaxTest">
+  <input type=textbox name="data">
+  <sx:submit type="button" label="Update Content" targets="t1"  id="ajaxbtn"/>
+</s:form>
+
+<br/><br/>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example1.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example1.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example1.jsp
new file mode 100644
index 0000000..4dfdd1d
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example1.jsp
@@ -0,0 +1,23 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+
+
+<body>
+<sx:div
+        cssStyle="border: 1px solid yellow;"
+        href="%{ajaxTest}">
+    Initial Content</sx:div>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example10.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example10.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example10.jsp
new file mode 100644
index 0000000..4350984
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example10.jsp
@@ -0,0 +1,31 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<script type="text/javascript">
+   function handler(widget, node) {
+     alert('I will handle this myself!');
+	 node.innerHTML = "Done";
+   }
+</script>
+
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+
+<body>
+<sx:div
+        id="once"
+        cssStyle="border: 1px solid yellow;"
+        href="%{ajaxTest}"
+		handler="handler">
+    Initial Content</sx:div>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example2.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example2.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example2.jsp
new file mode 100644
index 0000000..4257d72
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example2.jsp
@@ -0,0 +1,28 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+
+<body>
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+
+
+<sx:div
+        id="once"
+        cssStyle="border: 1px solid yellow;"
+        href="%{#ajaxTest}"
+        updateFreq="2000"
+        indicator="indicator"
+		>
+    Initial Content</sx:div>
+<img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" alt="Loading..." style="display:none"/>
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example3.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example3.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example3.jsp
new file mode 100644
index 0000000..1ea2b17
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example3.jsp
@@ -0,0 +1,27 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<body>
+
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+
+
+<sx:div
+        id="twoseconds"
+        cssStyle="border: 1px solid yellow;"
+        href="%{ajaxTest}"
+        delay="2000"
+        updateFreq="%{#parameters.period}"
+        errorText="There was an error">Initial Content</sx:div>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example4.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example4.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example4.jsp
new file mode 100644
index 0000000..959cff1
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example4.jsp
@@ -0,0 +1,28 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<body>
+
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+
+<sx:div
+        id="fiveseconds"
+        cssStyle="border: 1px solid yellow;"
+        href="%{ajaxTest}"
+        delay="1000"
+        updateFreq="5000"
+        errorText="There was an error"
+        loadingText="reloading"
+        showLoadingText="true">loading now</sx:div>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example5.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example5.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example5.jsp
new file mode 100644
index 0000000..ac06d1e
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example5.jsp
@@ -0,0 +1,27 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<body>
+
+<s:url var="ajaxNoUrl" value="/AjaxNoUrl.jsp" />
+
+<sx:div
+        id="error"
+        cssStyle="border: 1px solid yellow;"
+        href="/AjaxNoUrl.jsp"
+        delay="1000"
+        errorText="Could not contact server"
+        loadingText="reloading">loading now</sx:div>
+
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example6.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example6.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example6.jsp
new file mode 100644
index 0000000..c944005
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example6.jsp
@@ -0,0 +1,24 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<body>
+
+<sx:div
+        id="error"
+        cssStyle="border: 1px solid yellow;"
+        href="/AjaxNoUrl.jsp"
+        delay="1000"
+        showErrorTransportText="true"
+        loadingText="reloading">loading now</sx:div>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example7.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example7.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example7.jsp
new file mode 100644
index 0000000..d444474
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example7.jsp
@@ -0,0 +1,27 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<body>
+
+<s:url var="test3" value="/Test3.action" />
+
+
+<sx:div
+        id="error"
+        cssStyle="border: 1px solid yellow;"
+        href="%{test3}"
+        delay="1000"
+		executeScripts="true"
+        loadingText="reloading">loading now</sx:div>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example8.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example8.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example8.jsp
new file mode 100644
index 0000000..3314475
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example8.jsp
@@ -0,0 +1,57 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<body>
+
+<script>
+	var controller = {
+		refresh : function() {},
+		start : function() {},
+		stop : function() {}
+	};
+
+
+	dojo.event.topic.registerPublisher("/refresh", controller, "refresh");
+	dojo.event.topic.registerPublisher("/startTimer", controller, "start");
+	dojo.event.topic.registerPublisher("/stopTimer", controller, "stop");
+
+</script>
+<form id="form">
+	<label for="textInput">Text to be echoed</label>
+	<input type=textbox id="textInput" name="data">
+</form>
+
+<br/><br/>
+
+<input type=button value="refresh" onclick="controller.refresh()">
+<input type=button value="stop timer" onclick="controller.stop()">
+<input type=button value="start timer" onclick="controller.start()">
+
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+
+<sx:div
+        id="once"
+        cssStyle="border: 1px solid yellow;"
+        href="%{ajaxTest}"
+        loadingText="Loading..."
+		listenTopics="/refresh"
+		startTimerListenTopics="/startTimer"
+		stopTimerListenTopics="/stopTimer"
+		updateFreq="3000"
+		autoStart="true"
+        highlightColor="red"
+		formId="form"
+		>
+    Initial Content</sx:div>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example9.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example9.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example9.jsp
new file mode 100644
index 0000000..14ab4f0
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example9.jsp
@@ -0,0 +1,63 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<body>
+
+<script>
+	var controller = {
+		refresh : function() {},
+		start : function() {},
+		stop : function() {}
+	};
+
+	dojo.event.topic.registerPublisher("/refresh", controller, "refresh");
+	dojo.event.topic.registerPublisher("/startTimer", controller, "start");
+	dojo.event.topic.registerPublisher("/stopTimer", controller, "stop");
+
+    dojo.event.topic.subscribe("/before", function(data, type, e){
+      alert('inside a topic event. before request');
+      //data : source element id
+      //type : "before" 
+      //e    : request object
+    });
+    
+    dojo.event.topic.subscribe("/after", function(data, type, e){
+      alert('inside a topic event. after request');
+      //data : text returned
+      //type : "load" 
+      //e    : undefined
+    });
+
+</script>
+
+<input type=button value="refresh" onclick="controller.refresh()">
+<input type=button value="start timer" onclick="controller.start()">
+<input type=button value="stop timer" onclick="controller.stop()">
+
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+
+<sx:div
+        id="div1"
+        cssStyle="border: 1px solid yellow;"
+        href="%{ajaxTest}"
+        listenTopics="/refresh"
+		startTimerListenTopics="/startTimer"
+		stopTimerListenTopics="/stopTimer"
+		updateFreq="10000"
+		autoStart="false"
+        beforeNotifyTopics="/before"
+        afterNotifyTopics="/after"
+		>
+    Initial Content</sx:div>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/index.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/index.jsp
new file mode 100644
index 0000000..a0e9711
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/index.jsp
@@ -0,0 +1,55 @@
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<html>
+<head>
+    <title>AJAX-based remote DIV tag</title>
+    <%@ include file="/WEB-INF/ajax/commonInclude.jsp" %>
+</head>
+
+<body>
+
+<h2>Examples</h2>
+
+<p>
+    <ol>
+        <li>
+            <a href="example1.jsp">A simple DIV that refreshes only once</a>
+        </li>
+
+		<li>
+            <a href="example10.jsp">A simple DIV that uses a custom handler</a>
+        </li>
+
+        <li>
+            <a href="example2.jsp?url=/AjaxTest.action">A simple DIV that updates every 2 seconds, with indicator</a>
+        </li>
+
+        <li>
+            <a href="example4.jsp">A simple DIV that updates every 5 seconds with loading text and reloading text and delay</a>
+        </li>
+
+        <li>
+            <a href="example5.jsp">A simple DIV's that cannot contact the server, with fixed error message</a>
+        </li>
+
+
+        <li>
+            <a href="example7.jsp">A div that calls the server, and JS in the resulting page is executed</a>
+        </li>
+
+        <li>
+            <a href="example8.jsp">A div that will listen to events to refresh and start/stop autoupdate, and gets highlighted in red (when it loads)</a>
+        </li>
+
+		<li>
+            <a href="example9.jsp">A div that will listen to events to refresh and start/stop autoupdate, publish notifyTopics</a>
+        </li>
+
+    </ol>
+
+
+</p>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remoteforms/index.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remoteforms/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remoteforms/index.jsp
new file mode 100644
index 0000000..a961b94
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remoteforms/index.jsp
@@ -0,0 +1,119 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <sx:head />
+
+    <script language="JavaScript" type="text/javascript">
+        dojo.event.topic.subscribe("/beforeSubmit", function(event, widget) {
+            alert('you can manipulate the form before it gets submitted. To cancel the submit event set event.cancel=true');
+            event.cancel = true;
+        });
+    </script>
+
+</head>
+
+<body>
+
+<div id='two' style="border: 1px solid yellow;"><b>initial content</b></div>
+
+
+<br /><br />
+Remote form replacing another div:<br/>
+<s:form
+        id='theForm2'
+        cssStyle="border: 1px solid green;"
+        action='AjaxRemoteForm'
+        method='post'>
+
+    <input type='text' name='data' value='Struts User'>
+
+    <sx:submit value="GO2" targets="two"/>
+
+</s:form>
+
+<br /><br />
+Remote form replacing the forms content:<br/>
+<s:form
+        id='theForm3'
+        cssStyle="border: 1px solid green;"
+        action='AjaxRemoteForm'
+        method='post'>
+
+    <input type='text' name='data' value='Struts User'>
+
+    <sx:submit value="GO3" targets="theForm3"/>
+
+</s:form>
+
+<br /><br />
+Remote form evaluating suplied JS on completion:<br/>
+<s:form
+        id='theForm4'
+        cssStyle="border: 1px solid green;"
+        action='Test3'
+        method='post'>
+
+    <input type='text' name='data' value='Struts User'>
+
+    <sx:submit value="GO4" executeScripts="true"/>
+
+</s:form>
+
+<br /><br />
+Submit outside form:<br/>
+<s:form
+        id='theForm5'
+        cssStyle="border: 1px solid green;"
+        action='AjaxRemoteForm'
+        method='post'>
+
+    <input type='text' name='data' value='Struts User'>
+</s:form>
+<sx:submit value="GO5" formId="theForm5" targets="two"/>
+
+<br /><br />
+<s:url var="remoteUrl" namespace="/remoteforms" action="AjaxRemoteForm"/>
+Submit outside form, href in submit tag:<br/>
+<s:form
+        id='theForm6'
+        cssStyle="border: 1px solid green;"
+        method='post'>
+
+    <input type='text' name='data' value='Struts User'>
+</s:form>
+<sx:submit value="GO6" formId="theForm6" targets="two" href="%{#remoteUrl}"/>
+
+<br /><br />
+Remote form whose submit is cancelled:<br/>
+<s:form
+        id='theForm7'
+        cssStyle="border: 1px solid green;"
+        action='AjaxRemoteForm'
+        method='post'>
+
+    <input type='text' name='data' value='Struts User'>
+
+    <sx:submit value="GO7" targets="theForm7" beforeNotifyTopics="/beforeSubmit"/>
+
+</s:form>
+
+<br /><br />
+A form with no remote submit (so should not be ajaxified):<br/>
+<s:form
+        id='theForm8'
+        cssStyle="border: 1px solid green;"
+        action='AjaxRemoteForm'
+        method='post'>
+
+    <input type='text' name='data' value='Struts User'>
+
+    <s:submit value="Go AWAY"  />
+
+</s:form>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/remotelink/index.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/remotelink/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotelink/index.jsp
new file mode 100644
index 0000000..89e32f3
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/remotelink/index.jsp
@@ -0,0 +1,127 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Examples</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<script type="text/javascript">
+   function handler(widget, node) {
+     alert('I will handle this myself!');
+	 dojo.byId(widget.targetsArray[0]).innerHTML = "Done";
+   }
+
+   dojo.event.topic.subscribe("/before", function(event, widget){
+      alert('inside a topic event. before request');
+      //event: set event.cancel = true, to cancel request
+      //widget: widget that published the topic
+   });
+   
+   dojo.event.topic.subscribe("/after", function(data, request, widget){
+      alert('inside a topic event. after request');
+      //data : text returned from request
+      //request: XMLHttpRequest object
+      //widget: widget that published the topic
+   });
+   
+   dojo.event.topic.subscribe("/error", function(error, request, widget){
+      alert('inside a topic event. on error');
+      //error : error object (error.message has the error message)
+      //request: XMLHttpRequest object
+      //widget: widget that published the topic
+   });
+   
+   dojo.event.topic.subscribe("/topics", function(data, type, e){
+      alert('inside a topic event. type='+type);
+      //data : text returned
+      //type : "before", "load", "error"
+      //e    : request object
+   });
+</script>
+
+<body>
+
+<div id="t1">Div 1</div>
+
+<br/>
+
+<div id="t2">Div 2</div>
+
+<br/><br/>
+
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+<s:url var="test3" value="/Test3.action" />
+
+<sx:a  
+        href="%{#ajaxTest}"
+        targets="t1"
+        highlightColor="red"
+        highlightDuration="2000">Update 'Div 1' and use red highligh to notify user of changed content</sx:a>
+
+<br/><br/>
+
+<sx:a   id="link1"
+        href="%{#ajaxTest}"
+        indicator="indicator"
+		targets="t1,t2" 
+        beforeNotifyTopics="/before"
+        afterNotifyTopics="/after" >Update 'Div 1' and 'Div 2', publish topic '/before' and '/after', use indicator</sx:a>
+<img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" alt="Loading..." style="display:none"/>
+
+<br/><br/>
+
+<sx:a  id="link2"
+        href="/AjaxNoUrl.jsp"
+		errorText="Error Loading"
+		targets="t1"
+        errorNotifyTopics="/error">Try to update 'Div 1', publish '/error', use custom error message</sx:a>
+
+<br/><br/>
+
+<sx:a  id="link3"
+        href="%{#ajaxTest}"
+		loadingText="Loading!!!"
+        showLoadingText="true"
+		targets="t1">Update 'Div 1', use custom loading message</sx:a>
+
+<br/><br/>
+
+<sx:a  id="link4"
+        href="%{#test3}"
+		executeScripts="true"
+		targets="t2">Update 'Div 2' and execute returned javascript </sx:a>
+
+<br/><br/>
+
+<sx:a  id="link5"
+        href="%{#ajaxTest}"
+		handler="handler"
+		targets="t2">Update 'Div 2' using a custom handler </sx:a>
+
+
+<br/><br/>
+
+<label for="textInput">Text to be echoed</label>
+
+<form id="form">
+  <input type=textbox name="data">
+</form>
+
+<br/><br/>
+
+<sx:a  id="link6"
+        href="%{#ajaxTest}"
+		targets="t2"
+		formId="form"
+		>Update 'Div 2' with the content of the textbox </sx:a>
+
+
+<br/><br/>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example1.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example1.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example1.jsp
new file mode 100644
index 0000000..8d455be
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example1.jsp
@@ -0,0 +1,95 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+ 
+<html>
+<head>
+    <title>Ajax examples - tabbled panel</title>
+
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+
+<body>
+
+    <table cellpadding="0" cellspacing="10" border="0" width="900">
+        <tr>
+            <td align="top" width="400">
+                <sx:tabbedpanel id="test" >
+                    <sx:div id="one" label="one" >
+                        This is the first pane<br/>
+                        <s:form>
+                            <s:textfield name="tt" label="Test Text"/>  <br/>
+                            <s:textfield name="tt2" label="Test Text2"/>
+                        </s:form>
+                    </sx:div>
+                    <sx:div id="two" label="two" >
+                        This is the second panel
+                    </sx:div>
+                    <sx:div id="three" label="three" >
+                        This is the three
+                    </sx:div>
+                </sx:tabbedpanel>
+            </td>
+            <td align="top">
+                <sx:tabbedpanel id="test2" >
+                    <sx:div id="left" label="left" >
+                        This is the left pane<br/>
+                        <s:form>
+                            <s:textfield name="tt" label="Test Text"/>  <br/>
+                            <s:textfield name="tt2" label="Test Text2"/>
+                        </s:form>
+                    </sx:div>
+                    <sx:div href="%{ajaxTest}" id="ryh1" 
+                                    label="remote one"></sx:div>
+                    <sx:div id="middle" label="middle" >
+                        middle tab<br/>
+                        <s:form>
+                            <s:textfield name="tt" label="Test Text44"/>  <br/>
+                            <s:textfield name="tt2" label="Test Text442"/>
+                        </s:form>
+                    </sx:div>
+                    <sx:div  href="%{ajaxTest}" id="ryh21"  label="remote right"/>
+                </sx:tabbedpanel>
+            </td>
+        </tr>
+        <tr>
+            <td align="top">
+                <sx:tabbedpanel id="testremote">
+                    <sx:div  href="%{ajaxTest}" id="r1"  label="remote one">
+                        <s:action name="AjaxTest" executeResult="true" />
+                    </sx:div>
+                    <sx:div  href="%{ajaxTest}" id="r2"  label="remote two"></sx:div>
+                    <sx:div  href="%{ajaxTest}" id="r3"  label="remote three"></sx:div>
+                </sx:tabbedpanel>
+            </td>
+            <td align="top">
+                <sx:tabbedpanel id="test3" >
+                    <sx:tabbedpanel id="test11" label="Container 1">
+                        <sx:div id="i11" label="inner 1 one">Inner 1</sx:div>
+                        <sx:div id="112" label="inner 1 two">Inner 2</sx:div>
+                        <sx:div id="i13" label="inner 1 three">Inner 3</sx:div>
+                    </sx:tabbedpanel>
+                   
+                    <sx:tabbedpanel id="test12" label="Container 2">
+                        <sx:div id="i21" label="inner 2 one" >Inner 21</sx:div>
+                        <sx:div id="122" label="inner 2 two" >Inner 22</sx:div>
+                        <sx:div id="i23" label="inner 2 three" >Inner 23</sx:div>
+                    </sx:tabbedpanel>
+                    
+                    <sx:tabbedpanel id="test13" label="Container 3">
+                        <sx:div id="i31" label="inner 3 one" >Inner 31</sx:div>
+                        <sx:div id="132" label="inner 3 two" >Inner 32</sx:div>
+                        <sx:div id="i33" label="inner 3 three" >Inner 33</sx:div>
+                    </sx:tabbedpanel>
+                </sx:tabbedpanel>
+            </td>
+        </tr>
+    </table>
+
+<s:include value="../footer.jsp"/>
+
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example2.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example2.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example2.jsp
new file mode 100644
index 0000000..65b54d2
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example2.jsp
@@ -0,0 +1,26 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax examples - tabbled panel</title>
+
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<body>
+
+    <sx:tabbedpanel id="test2" cssStyle="width: 500px; height: 300px;" doLayout="true">
+        <sx:div label="test1"  >
+          I'm a Tab!!!
+        </sx:div >
+        <sx:div  id="middle" label="test2"   >
+          I'm the other Tab!!!
+        </sx:div >
+    </sx:tabbedpanel>
+				  
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example3.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example3.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example3.jsp
new file mode 100644
index 0000000..cd3c9b6
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example3.jsp
@@ -0,0 +1,46 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax examples - tabbled panel</title>
+
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<s:url var="ajaxTest" value="/AjaxTest.action" />
+
+<body>
+
+    <table cellpadding="0" cellspacing="10" border="0" width="600">
+        <tr>
+            <td align="top">
+                <!--// START SNIPPET: tabbedpanel-tag-->
+                <sx:tabbedpanel id="test2" cssStyle="width: 500px; height: 300px;" doLayout="true">
+                      <sx:div id="left" label="left">
+                          This is the left pane<br/>
+                          <s:form >
+                              <s:textfield name="tt" label="Test Text" />  <br/>
+                              <s:textfield name="tt2" label="Test Text2" />
+                          </s:form>
+                      </sx:div>
+                      <sx:div href="%{ajaxTest}" id="ryh1" label="remote one" preload="false"/>
+                      <sx:div id="middle" label="middle">
+                          middle tab<br/>
+                          <s:form >
+                              <s:textfield name="tt" label="Test Text44" />  <br/>
+                              <s:textfield name="tt2" label="Test Text442" />
+                          </s:form>
+                      </sx:div>
+                      <sx:div href="%{ajaxTest}"  id="ryh21" label="remote right" preload="false"/>
+                  </sx:tabbedpanel>
+                <!--// END SNIPPET: tabbedpanel-tag-->
+             </td>
+        </tr>
+    </table>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example4.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example4.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example4.jsp
new file mode 100644
index 0000000..e6f1b2b
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example4.jsp
@@ -0,0 +1,57 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax examples - tabbled panel</title>
+
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<script>
+    function enableTab(id) {
+      var tabContainer = dojo.widget.byId('tabContainer');
+      tabContainer.enableTab(id);
+    }
+    
+    function disableTab(index) {
+      var tabContainer = dojo.widget.byId('tabContainer');
+      tabContainer.disableTab(index);
+    }
+</script>
+
+<body>
+    
+    <sx:tabbedpanel id="tabContainer" cssStyle="width: 500px; height: 300px;" doLayout="true">
+          <sx:div id="tab1" label="test1"  >
+              Enabled Tab
+          </sx:div >
+          <sx:div  id="tab2" label="test2"  disabled="true" >
+              Diabled Tab
+          </sx:div >
+           <sx:div  id="tab3" label="test3" >
+              Some other Tab
+          </sx:div >
+      </sx:tabbedpanel>
+
+    <br />
+    
+    <input type="button" onclick="enableTab(1)" value="Enable Tab 2 using Index" />
+    <input type="button" onclick="disableTab(1)" value="Disable Tab 2 using Index" />
+    
+    <br />
+    
+    <input type="button" onclick="enableTab('tab2')" value="Enable Tab 2 using Id" />
+    <input type="button" onclick="disableTab('tab2')" value="Disable Tab 2 using Id" />
+    
+    <br />
+    
+    <input type="button" onclick="enableTab(dojo.widget.byId('tab2'))" value="Enable Tab 2 using widget" />
+    <input type="button" onclick="disableTab(dojo.widget.byId('tab2'))" value="Disable Tab 2 using widget" />
+
+<br /> <br />     
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example5.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example5.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example5.jsp
new file mode 100644
index 0000000..25ed4f7
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example5.jsp
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax examples - tabbled panel</title>
+
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<body>
+
+				<sx:tabbedpanel id="test2" cssStyle="width: 500px; height: 300px;" doLayout="true" labelposition="bottom">
+                      <sx:div id="left" label="test1" closable="true">
+                          I'm a Tab!!!
+                      </sx:div >
+                      <sx:div  id="middle" label="test2"  closable="true">
+                          I'm the other Tab!!!
+                      </sx:div >
+                     
+                  </sx:tabbedpanel>
+				  
+				
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example5Ok.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example5Ok.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example5Ok.jsp
new file mode 100644
index 0000000..5c3b801
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example5Ok.jsp
@@ -0,0 +1,9 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+    pageEncoding="UTF-8"%>
+<%@taglib prefix="s" uri="/struts-tags" %>
+    
+<h1>OK</h1>    
+<s:property value="name" /><br/>
+<s:property value="age" /><br/>
+    
+    
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example6.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example6.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example6.jsp
new file mode 100644
index 0000000..3bc62cd
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example6.jsp
@@ -0,0 +1,40 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax examples - tabbled panel</title>
+
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<script>
+    dojo.event.topic.subscribe('/before', function(event, tab, tabContainer) {
+      alert("Before selecting tab. Set 'event.cancel=true' to prevent selection");
+    });
+    dojo.event.topic.subscribe('/after', function(tab, tabContainer) {
+      alert("After tab was selected");
+    });
+</script>
+<body>
+    
+<sx:tabbedpanel 
+    id="tabContainer"
+    cssStyle="width: 500px; height: 300px;" 
+    doLayout="true"
+    beforeSelectTabNotifyTopics="/before"
+    afterSelectTabNotifyTopics="/after">
+  <sx:div id="tab1" label="test1"  >
+      Tab 1
+  </sx:div >
+  <sx:div  id="tab2" label="test2" >
+      Tab 2
+  </sx:div >
+</sx:tabbedpanel>
+
+<br /><br />    
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/index.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/index.jsp
new file mode 100644
index 0000000..196d0d4
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/index.jsp
@@ -0,0 +1,28 @@
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<html>
+<head>
+    <title>Tabbed Panes</title>
+    <%@ include file="/WEB-INF/ajax/commonInclude.jsp" %>
+</head>
+
+<body>
+
+<h2>Examples</h2>
+
+<p>
+    <ol>
+        <li><a href="example2.jsp">A local tabbed panel width fixed size (doLayout="true")</a></li>
+        <li><a href="example4.jsp">A Local tabbed panel with disabled tabs</a></li>
+        <li><a href="example6.jsp">A Local tabbed panel that publishes topics when tabs are selected(before and after)</a></li>
+        <li><a href="example3.jsp">A remote (href != "") and local tabbed panel</a></li>
+        <li><a href="example1.jsp">Various remote and local tabbed panels (with enclosed tabbed pannels) with layout (doLayout="false")</a></li>
+        <li><a href="example5.jsp">A local tabbed panel width fixed size (doLayout="true") with close button on the tab pane (closable="true" on tabs), and tabs on the bottom (labelposition="bottom")</a></li>
+    </ol>
+
+
+</p>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel1.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel1.ftl b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel1.ftl
new file mode 100644
index 0000000..fcc895e
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel1.ftl
@@ -0,0 +1,3 @@
+
+Hello, <br/>
+Today is ${todayDate?html}, the time now is ${todayTime?html}

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel2.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel2.ftl b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel2.ftl
new file mode 100644
index 0000000..e866e6d
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel2.ftl
@@ -0,0 +1,7 @@
+
+<div id="result">
+</div>
+<@sx.form action="panel2Submit" namespace="/nodecorate">
+	<@s.textfield label="Name" name="name" />
+	<@sx.submit targets="result" />
+</@sx.form>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel2Submit.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel2Submit.ftl b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel2Submit.ftl
new file mode 100644
index 0000000..d338eac
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel2Submit.ftl
@@ -0,0 +1,2 @@
+
+Hello, ${name?html}

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel3.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel3.ftl b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel3.ftl
new file mode 100644
index 0000000..79209df
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel3.ftl
@@ -0,0 +1,9 @@
+
+<div id="result">
+</div>
+
+<@s.form action="panel3Submit" namespace="/nodecorate">
+	<@sx.autocompleter label="Gender" name="gender" list="%{#{'Male':'Male','Female':'Female'}}"  />
+	<@sx.submit targets="result" />
+</@s.form>
+

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel3Submit.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel3Submit.ftl b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel3Submit.ftl
new file mode 100644
index 0000000..7dacc93
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel3Submit.ftl
@@ -0,0 +1,2 @@
+
+So, you are a ${gender?html}

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/testjs.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/testjs.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/testjs.jsp
new file mode 100644
index 0000000..5223ef7
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/testjs.jsp
@@ -0,0 +1,14 @@
+<%
+    request.setAttribute("decorator", "none");
+    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
+    response.setHeader("Pragma","no-cache"); //HTTP 1.0
+    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
+%>
+
+<script language="JavaScript" type="text/javascript">
+    alert('This JavaScript currently being evaluated is in the result...');
+</script>
+Show me some text also
+<script language="JavaScript" type="text/javascript">
+    alert('And some more text for fun!');
+</script>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/getCategory.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/getCategory.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/getCategory.jsp
new file mode 100644
index 0000000..6a56cbd
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/getCategory.jsp
@@ -0,0 +1,23 @@
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@include file="partialChunkHeader.jsp"%>
+<ul>
+<s:iterator value="category.children">
+    <li>
+        <s:if test="children.size() > 0">
+            <sx:a href="toggle.action?catId=%{id}">+</sx:a>
+        </s:if>
+        <s:property value="name"/>
+    </li>
+    <s:if test="toggle">
+        <s:set name="display" value="'none'"/>
+    </s:if>
+    <s:else>
+        <s:set name="display" value="''"/>
+    </s:else>                                                                                     ›
+
+    <sx:div id="children_%{id}"
+            cssStyle="display: %{display}"
+            href="getCategory.action?catId=%{id}"
+            refreshListenTopic="children_%{id}"/>
+</s:iterator>
+</ul>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/partialChunkHeader.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/partialChunkHeader.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/partialChunkHeader.jsp
new file mode 100644
index 0000000..01113d6
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/partialChunkHeader.jsp
@@ -0,0 +1,6 @@
+<%
+    request.setAttribute("decorator", "none");
+    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
+    response.setHeader("Pragma","no-cache"); //HTTP 1.0
+    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
+%>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/toggle.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/toggle.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/toggle.jsp
new file mode 100644
index 0000000..35010bb
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/toggle.jsp
@@ -0,0 +1,12 @@
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@include file="partialChunkHeader.jsp"%>
+<%
+    response.setContentType("text/javascript");
+%>
+dojo.event.topic.publish("children_<s:property value="category.id"/>");
+var d = document.getElementById("children_<s:property value="category.id"/>");
+if (d.style.display != "none") {
+    d.style.display = "none";
+} else {
+    d.style.display = "";
+}

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/tree.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/tree.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/tree.jsp
new file mode 100644
index 0000000..81d68d6
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/tree/tree.jsp
@@ -0,0 +1,13 @@
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<html>
+<head>
+    <title>Tree</title>
+    <sx:head />
+</head>
+
+<body>
+
+<s:action name="getCategory" executeResult="true"/>
+
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/ajax/widgets/index.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/ajax/widgets/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/widgets/index.jsp
new file mode 100644
index 0000000..e86efbd
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/widgets/index.jsp
@@ -0,0 +1,40 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
+
+<html>
+<head>
+    <title>Ajax Widgets</title>
+    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
+</head>
+
+<body>
+
+<br/>
+NOTES:
+<ul>
+    <li>Make sure that there is a 'value' attribute in the textarea with the content for the editor</li>
+    <li>This is experimental</li>
+</ul>
+
+
+Default Editor configuration:<br/>
+<s:form id="form1" action="AjaxRemoteForm" method="post">
+    <sx:textarea name="data" cols="50" rows="10" value="Test Data 1" />
+    <s:submit value="Submit"/>
+</s:form>
+<br/>
+
+Configured Editor configuration:<br/>  
+<s:form id="form2" action="AjaxRemoteForm" method="post">
+    <sx:textarea id="editor2" name="data" cols="50" rows="10" value="Test Data 2">
+        <s:param name="editorControls">textGroup;|;justifyGroup;|;listGroup;|;indentGroup</s:param>
+    </sx:textarea>
+    <s:submit value="Submit"/>
+</s:form>
+<br/>
+
+<s:include value="../footer.jsp"/>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/chat/chatLogin.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/chat/chatLogin.ftl b/apps/showcase/src/main/webapp/WEB-INF/chat/chatLogin.ftl
new file mode 100644
index 0000000..439ea6b
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/chat/chatLogin.ftl
@@ -0,0 +1,27 @@
+<html>
+	<head>
+		<title>Struts2 Showcase - Chat - Login</title>
+		<@s.head />
+	</head>
+	<body>
+	<div class="page-header">
+		<h1>Chat - Login</h1>
+	</div>
+
+	<div class="container-fluid">
+		<div class="row-fluid">
+			<div class="span12">
+			<@s.actionerror cssClass="alert alert-error"/>
+			<@s.actionmessage cssClass="alert alert-info"/>
+			<@s.fielderror  cssClass="alert alert-error"/>
+
+			<@s.form action="login" namespace="/chat" method="POST">
+				<@s.textfield name="name" label="Name" required="true" />
+				<@s.submit cssClass="btn btn-primary"/>
+			</@s.form>
+			</div>
+		</div>
+	</div>
+	</body>
+</html>
+

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/chat/createRoom.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/chat/createRoom.ftl b/apps/showcase/src/main/webapp/WEB-INF/chat/createRoom.ftl
new file mode 100644
index 0000000..fbe71cc
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/chat/createRoom.ftl
@@ -0,0 +1,2 @@
+<@s.actionerror />
+<@s.fielderror />

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/chat/index.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/chat/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/chat/index.jsp
new file mode 100644
index 0000000..b58d7a3
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/chat/index.jsp
@@ -0,0 +1,3 @@
+
+<% response.sendRedirect("main.action"); %>
+

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/chat/messagesAvailableInRoom.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/chat/messagesAvailableInRoom.ftl b/apps/showcase/src/main/webapp/WEB-INF/chat/messagesAvailableInRoom.ftl
new file mode 100644
index 0000000..2550dcd
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/chat/messagesAvailableInRoom.ftl
@@ -0,0 +1,33 @@
+
+<table class="table">
+<tr class="tableHeader">
+	<td class="tableSenderColumn">Sender</td>
+	<td class="tableDateColumn">Date</td>
+	<td class="tableMessageColumn">Message</td>
+</tr>
+<@s.iterator id="message" value="%{messagesAvailableInRoom}" status="stat">
+<tr class="tableContent">
+	<#if stat.odd>
+	<td class="tableSenderColumnOdd"> 
+	<#else>
+	<td clas="tableSenderColumnEven">
+	</#if>
+		<@s.property value="%{#message.creator.name}" />
+	</td>
+	<#if stat.odd>
+	<td class="tableDateColumnOdd">
+	<#else>
+	<td class="tableDateColumnEven">
+	</#if>
+		<@s.property value="%{#message.creationDate}" />
+	</td>
+	<#if stat.odd>
+	<td class="tableMessageColumnOdd">
+	<#else>
+	<td class="tableMessageColumnEven">
+	</#if>
+		<@s.property value="%{#message.message}" />
+	</td>
+</tr>
+</@s.iterator>
+</table>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/chat/roomSelection.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/chat/roomSelection.ftl b/apps/showcase/src/main/webapp/WEB-INF/chat/roomSelection.ftl
new file mode 100644
index 0000000..05eaf17
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/chat/roomSelection.ftl
@@ -0,0 +1,172 @@
+<html>
+<head>
+	<title>Struts2 Showcase - Chat - Room Selection</title>
+<@sx.head />
+	<style type="text/css">
+		div.box {
+			border: 1px solid darkblue;
+			margin: 5px;
+		}
+
+		div.box h3 {
+			color: white;
+			background: darkblue;
+			margin: 3px;
+			padding: 2px;
+		}
+
+		div.nobox {
+			margin: 5px;
+		}
+
+		table.table {
+			border: 1px solid darkblue;
+			width: 98%;
+			margin: 5px;
+		}
+
+		table.table tr.tableHeader {
+			color: white;
+			background: darkblue;
+			margin: 3px;
+			padding: 2px;
+			font-size: medium;
+			font-weight: bold;
+		}
+
+		table.table td.tableOperationColumnOdd {
+			background: gray;
+			color: white;
+			width: 20%
+		}
+
+		table.table td.tableNameColumnOdd {
+			background: gray;
+			color: white;
+			width: 20%;
+		}
+
+		table.table td.tableDescriptionColumnOdd {
+			background: gray;
+			color: white;
+			width: 40%;
+		}
+
+		table.table td.tableDateCreatedColumnOdd {
+			background: gray;
+			color: white;
+			width: 20%;
+		}
+
+		table.table td.tableOperationColumnEven {
+			background: white;
+			color: gray;
+			width: 20%
+		}
+
+		table.table td.tableNameColumnEven {
+			background: white;
+			color: gray;
+			width: 20%;
+		}
+
+		table.table td.tableDescriptionColumnEven {
+			background: white;
+			color: gray;
+			width: 40%;
+		}
+
+		table.table td.tableDateCreatedColumnEven {
+			background: white;
+			color: gray;
+			width: 20%;
+		}
+
+		div.container {
+			margin-left: auto;
+			margin-right: auto;
+			width: 100%;
+		}
+
+		div.left {
+			width: 20%;
+			float: left;
+		}
+
+		div.right {
+			width: 20%;
+			float: right;
+		}
+
+		div.center {
+			width: 60%;
+			float: left;
+		}
+
+	</style>
+</head>
+<body>
+<div class="page-header">
+	<h1>Chat - Room Selection</h1>
+</div>
+
+<div class="container-fluid">
+	<div class="row-fluid">
+		<div class="span12 container">
+
+
+			<div class="left">
+				<div class="box">
+					<h3>Operations</h3>
+				<@s.url id="url" action="logout" namespace="/chat" />
+					<ul>
+						<li><@s.a href="%{#url}">Logout</@s.a></li>
+					</ul>
+				</div>
+			<#if (actionErrors?size gt 0)>
+				<div class="box">
+					<h3>Action Errors</h3>
+					<@s.actionerrors />
+				</div>
+			</#if>
+				<div class="box">
+					<h3>Users Available In Chat</h3>
+				<@s.url id="usersAvailableUrl" action="usersAvailable" namespace="/chat/ajax" />
+				<@sx.div id="usersAvailable" updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}"
+				href="%{usersAvailableUrl}"
+				class="box">
+					Initial Loading Users ...
+				</@sx.div>
+				</div>
+			</div>
+
+
+			<div class="center">
+				<div class="box">
+					<h3>Rooms Available In Chat</h3>
+				<@s.url id="roomsAvailableUrl" action="roomsAvailable" namespace="/chat/ajax" />
+				<@sx.div id="roomsAvailable" listenTopics="topicRoomCreated"
+				updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}"
+				href="%{roomsAvailableUrl}" >
+					Initial Loading Rooms ...
+				</@sx.div>
+				</div>
+
+				<div id="createRoom" class="box">
+					<h3>Create Room In Chat</h3>
+
+					<div id="createRoomResult"></div>
+				<@s.form id="createRoomId" action="createRoom" namespace="/chat/ajax" method="POST">
+					<@s.textfield label="Room Name" required="true" name="name" />
+					<@s.textarea theme="xhtml" label="Room Description" required="true" name="Description" />
+					<@sx.submit value="%{'Create Room'}" targets="createRoomResult" afterNotifyTopics="topicRoomCreated" align="left" cssClass="btn btn-primary" />
+				</@s.form>
+				</div>
+			</div>
+
+		</div>
+	</div>
+</div>
+</body>
+</html>
+

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/chat/roomsAvailable.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/chat/roomsAvailable.ftl b/apps/showcase/src/main/webapp/WEB-INF/chat/roomsAvailable.ftl
new file mode 100644
index 0000000..1d343c0
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/chat/roomsAvailable.ftl
@@ -0,0 +1,44 @@
+
+<table class="table">
+<tr class="tableHeader">
+	<td>Operation</td>
+	<td>Name</td>
+	<td>Description</td>
+	<td>Date Created</td>
+</tr>
+<@s.iterator id="room" value="%{availableRooms}" status="stat">
+<tr class="tableContent">
+	<#if stat.isOdd()>
+	<td class="tableOperationColumnOdd">
+	<#else>
+	<td class="tableOperationColumnEven">
+	</#if>
+	<@s.url id="url" action="enterRoom" namespace="/chat">
+		<@s.param name="roomName" value="%{#room.name}" />
+	</@s.url>
+	<@s.a href="%{url}">Enter</@s.a>
+	</td>
+	<#if stat.odd>
+	<td class="tableNameColumnOdd">
+	<#else>
+	<td class="tableNameColumnEven">
+	</#if>
+	<@s.property value="%{#room.name}" />
+	</td>
+	<#if stat.odd>
+	<td class="tableDescriptionColumnOdd">
+	<#else>
+	<td class="tableDescriptionColumnEven">
+	</#if>
+	<@s.property value="%{#room.description}" />
+	</td>
+	<#if stat.odd>
+	<td class="tableDateCreatedColumnOdd">
+	<#else>
+	<td class="tableDateCreateColumnEven">
+	</#if>
+	<@s.property value="%{#room.creationDate}" />
+	</td>
+</tr>
+</@s.iterator>
+</table>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/chat/sendMessageToRoomResult.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/chat/sendMessageToRoomResult.ftl b/apps/showcase/src/main/webapp/WEB-INF/chat/sendMessageToRoomResult.ftl
new file mode 100644
index 0000000..c75d32b
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/chat/sendMessageToRoomResult.ftl
@@ -0,0 +1,2 @@
+
+<@s.fielderror />

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/chat/showRoom.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/chat/showRoom.ftl b/apps/showcase/src/main/webapp/WEB-INF/chat/showRoom.ftl
new file mode 100644
index 0000000..0a82d48
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/chat/showRoom.ftl
@@ -0,0 +1,167 @@
+<html>
+<head>
+	<title>Struts2 Showcase - Chat - Show Room </title>
+<@sx.head />
+	<style type="text/css">
+		div.box {
+			border: 1px solid darkblue;
+			margin: 5px;
+		}
+
+		div.box h3 {
+			color: white;
+			background: darkblue;
+			margin: 3px;
+			padding: 2px;
+		}
+
+		div.nobox {
+			margin: 5px;
+		}
+
+		table.table {
+			border: 1px solid darkblue;
+			width: 98%;
+			margin: 5px;
+		}
+
+		table.table tr.tableHeader {
+			color: white;
+			background: darkblue;
+			margin: 3px;
+			padding: 2px;
+			font-size: medium;
+			font-weight: bold;
+		}
+
+		table.table td.tableSenderColumnOdd {
+			background: gray;
+			color: white;
+			width: 20%
+		}
+
+		table.table td.tableDateColumnOdd {
+			background: gray;
+			color: white;
+			width: 20%;
+		}
+
+		table.table td.tableMessageColumnOdd {
+			background: gray;
+			color: white;
+			width: 60%;
+		}
+
+		table.table td.tableSenderColumnEven {
+			background: white;
+			color: gray;
+			width: 20%
+		}
+
+		table.table td.tableDateColumnEven {
+			background: white;
+			color: gray;
+			width: 20%;
+		}
+
+		table.table td.tableMessageColumnEven {
+			background: white;
+			color: gray;
+			width: 60%;
+		}
+
+		div.container {
+			margin-left: auto;
+			margin-right: auto;
+			width: 100%;
+		}
+
+		div.left {
+			width: 20%;
+			float: left;
+		}
+
+		div.right {
+			width: 20%;
+			float: left;
+		}
+
+		div.center {
+			width: 60%;
+			float: left;
+		}
+
+	</style>
+</head>
+<body>
+<div class="page-header">
+	<h1>Chat - Show Room</h1>
+</div>
+
+<div class="container-fluid">
+	<div class="row-fluid">
+		<div class="span12 container">
+			<div class="left">
+				<div class="box">
+					<h3>Operation</h3>
+				<@s.url id="url" action="exitRoom" namespace="/chat">
+					<@s.param name="roomName" value="%{roomName}" />
+				</@s.url>
+					<ul>
+						<li><@s.a href="%{#url}">Exit Room</@s.a></li>
+					</ul>
+				</div>
+				<div class="box">
+					<h3>Users Available In Chat</h3>
+				<@s.url id="usersAvailableUrl" action="usersAvailable" namespace="/chat/ajax" />
+				<@sx.div id="usersAvailable" href="%{usersAvailableUrl}"
+				updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}">
+					Initial Users Available ...
+				</@sx.div>
+				</div>
+			</div>
+
+			<div class="center">
+				<div class="box">
+					<h3>Messages Posted In Room [${roomName?default('')?html}]</h3>
+				<@s.url id="url" value="/chat/ajax/messagesAvailableInRoom.action" includeContext="true">
+					<@s.param name="roomName" value="%{roomName}" />
+				</@s.url>
+				<@sx.div id="messagesInRoom" href="%{#url}" includeContext="true"
+				updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}"
+				listenTopics="topicMessageSend">
+					Initial Messages In Room ...
+				</@sx.div>
+				</div>
+
+				<div class="box">
+					<h3>Send Messages</h3>
+				<@s.form id="sendMessageForm" action="sendMessageToRoom" namespace="/chat/ajax" method="POST">
+					<div id="sendMessageResult"></div>
+					<@s.textarea label="Message"name="message" theme="xhtml" />
+					<@s.hidden name="roomName" value="%{roomName}" />
+					<@sx.submit id="submit" resultDivId="sendMessageResult" afterNotifyTopics="topicMessageSend" value="%{'Send'}"  cssClass="btn btn-primary"/>
+				</@s.form>
+				</div>
+			</div>
+
+
+			<div class="right">
+				<div class="box">
+					<h3>Users Available In Room [${roomName?default('')?html}]</h3>
+				<@s.url id="url" value="/chat/ajax/usersAvailableInRoom.action" includeContext="true">
+					<@s.param name="roomName" value="%{roomName}" />
+				</@s.url>
+				<@sx.div id="usersAvailableInRoom" href="%{#url}" includeContext="true"
+				delay="1" updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}">
+					Initial Users Available In Room ...
+				</@sx.div>
+				</div>
+			</div>
+
+
+		</div>
+	</div>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/chat/usersAvailable.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/chat/usersAvailable.ftl b/apps/showcase/src/main/webapp/WEB-INF/chat/usersAvailable.ftl
new file mode 100644
index 0000000..1ff2963
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/chat/usersAvailable.ftl
@@ -0,0 +1,6 @@
+
+<ul>
+<#list availableUsers as user>
+	<li>${user.name?html}</li>
+</#list>
+</ul>

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/chat/usersAvailableInRoom.ftl
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/chat/usersAvailableInRoom.ftl b/apps/showcase/src/main/webapp/WEB-INF/chat/usersAvailableInRoom.ftl
new file mode 100644
index 0000000..95822bf
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/chat/usersAvailableInRoom.ftl
@@ -0,0 +1,8 @@
+
+<ul>
+<@s.iterator id="member" value="%{usersAvailableInRoom}">
+	<li><@s.property value="%{#member.name}" /></li>
+</@s.iterator>
+</ul>
+
+

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/Address.java.txt
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/Address.java.txt b/apps/showcase/src/main/webapp/WEB-INF/conversion/Address.java.txt
new file mode 100644
index 0000000..d3e494c
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/Address.java.txt
@@ -0,0 +1,35 @@
+/*
+ * $Id$
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 org.apache.struts2.showcase.conversion;
+
+
+/**
+ * @version $Date$ $Id$
+ */
+public class Address {
+	
+	private String id;
+	private String address;
+	
+	public String getId() { return id; }
+	public void setId(String id) { this.id = id; }
+	
+	public String getAddress() { return address; }
+	public void setAddress(String address) { this.address = address; }
+	
+}

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/AddressAction.java.txt
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/AddressAction.java.txt b/apps/showcase/src/main/webapp/WEB-INF/conversion/AddressAction.java.txt
new file mode 100644
index 0000000..4342f8b
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/AddressAction.java.txt
@@ -0,0 +1,44 @@
+/*
+ * $Id$
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 org.apache.struts2.showcase.conversion;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+/**
+ * @version $Date$ $Id$
+ */
+public class AddressAction extends ActionSupport {
+
+	private Set addresses = new LinkedHashSet();
+	
+	public Set getAddresses() { return addresses; }
+	public void setAddresses(Set addresses) { this.addresses = addresses; }
+	
+	
+	public String input() throws Exception {
+		return SUCCESS;
+	}
+	
+	public String submit() throws Exception {
+		System.out.println(addresses);
+		return SUCCESS;
+	}
+}

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/EnumTypeConverter.java.txt
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/EnumTypeConverter.java.txt b/apps/showcase/src/main/webapp/WEB-INF/conversion/EnumTypeConverter.java.txt
new file mode 100644
index 0000000..acc3cf2
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/EnumTypeConverter.java.txt
@@ -0,0 +1,55 @@
+/*
+ * $Id$
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 org.apache.struts2.showcase.conversion;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.struts2.util.StrutsTypeConverter;
+
+/**
+ * @version $Date$ $Id$
+ */
+public class EnumTypeConverter extends StrutsTypeConverter {
+
+	@Override
+	public Object convertFromString(Map context, String[] values, Class toClass) {
+		List<Enum> result = new ArrayList<Enum>();
+		for (int a=0; a< values.length; a++) {
+			Enum e = Enum.valueOf(OperationsEnum.class, values[a]);
+			if (e != null)
+				result.add(e);
+		}
+		return result;
+	}
+
+	@Override
+	public String convertToString(Map context, Object o) {
+		List l = (List) o;
+		String result ="<";
+		for (Iterator i = l.iterator(); i.hasNext(); ) {
+			result = result + "["+ i.next() +"]";
+		}
+		result = result+">";
+		return result;
+	}
+
+	
+}

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnum.java.txt
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnum.java.txt b/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnum.java.txt
new file mode 100644
index 0000000..14865ce
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnum.java.txt
@@ -0,0 +1,30 @@
+/*
+ * $Id$
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 org.apache.struts2.showcase.conversion;
+
+/**
+ * 
+ * @version $Date$ $Id$
+ */
+public enum OperationsEnum {
+	ADD, 
+	MINUS, 
+	DIVIDE, 
+	MULTIPLY, 
+	REMAINDER;
+}

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnumAction.java.txt
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnumAction.java.txt b/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnumAction.java.txt
new file mode 100644
index 0000000..35e1175
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnumAction.java.txt
@@ -0,0 +1,53 @@
+/*
+ * $Id$
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 org.apache.struts2.showcase.conversion;
+
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+/**
+ * 
+ * @version $Date$ $Id$
+ */
+public class OperationsEnumAction extends ActionSupport {
+
+	private static final long serialVersionUID = -2229489704988870318L;
+	
+	private List<OperationsEnum> selectedOperations = new LinkedList<OperationsEnum>();
+	
+	public List<OperationsEnum> getSelectedOperations() { return this.selectedOperations; }
+	public void setSelectedOperations(List<OperationsEnum> selectedOperations) {
+		this.selectedOperations = selectedOperations;
+	}
+	
+	
+	public List<OperationsEnum> getAvailableOperations() {
+		return Arrays.asList(OperationsEnum.values());
+	}
+	
+	public String input() throws Exception {
+		return SUCCESS;
+	}
+	public String submit() throws Exception {
+		return SUCCESS;
+	}
+}
+

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnumActionConversion.txt
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnumActionConversion.txt b/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnumActionConversion.txt
new file mode 100644
index 0000000..621beaf
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/OperationsEnumActionConversion.txt
@@ -0,0 +1,4 @@
+
+selectedOperations=org.apache.struts2.showcase.conversion.EnumTypeConverter
+Element_selectedOperations=org.apache.struts2.showcase.conversion.OperationsEnum
+

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/Person.java.txt
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/Person.java.txt b/apps/showcase/src/main/webapp/WEB-INF/conversion/Person.java.txt
new file mode 100644
index 0000000..f87072c
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/Person.java.txt
@@ -0,0 +1,34 @@
+/*
+ * $Id$
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 org.apache.struts2.showcase.conversion;
+
+import java.io.Serializable;
+
+/**
+ *
+ */
+public class Person implements Serializable {
+	private String name;
+	private Integer age;
+	
+	public void setName(String name) { this.name = name; }
+	public String getName() { return this.name; }
+	
+	public void setAge(Integer age) { this.age = age; }
+	public Integer getAge() { return this.age; }
+}

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/PersonAction.java.txt
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/PersonAction.java.txt b/apps/showcase/src/main/webapp/WEB-INF/conversion/PersonAction.java.txt
new file mode 100644
index 0000000..1e0bd55
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/PersonAction.java.txt
@@ -0,0 +1,43 @@
+/*
+ * $Id$
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 org.apache.struts2.showcase.conversion;
+
+import java.util.List;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+/**
+ * 
+ */
+public class PersonAction extends ActionSupport {
+	
+	private List persons;
+	
+	public List getPersons() { return persons; }
+	public void setPersons(List persons) { this.persons = persons; }
+	
+	
+	
+	public String input() throws Exception {
+		return SUCCESS;
+	}
+	
+	public String submit() throws Exception {
+		return SUCCESS;
+	}
+}

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/enterAddressInfo.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/enterAddressInfo.jsp b/apps/showcase/src/main/webapp/WEB-INF/conversion/enterAddressInfo.jsp
new file mode 100644
index 0000000..b0e3e79
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/enterAddressInfo.jsp
@@ -0,0 +1,53 @@
+<%@taglib prefix="s" uri="/struts-tags" %>
+<html>
+<head>
+	<title>Struts2 Showcase - Conversion - Populate into Struts action class a Set of Address.java Object</title>
+</head>
+<body>
+<div class="page-header">
+	<h1>Conversion - Populate into Struts action class a Set of Address.java Object</h1>
+</div>
+
+<div class="container-fluid">
+	<div class="row-fluid">
+		<div class="span12">
+
+			<p/>
+			An example populating a Set of object (Address.java) into Struts' action (AddressAction.java)
+			<p/>
+
+			See the jsp code <s:url var="url" action="showAddressJspCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
+			See the code for PersonAction.java <s:url var="url" action="showAddressActionJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
+			See the code for Person.java <s:url var="url" action="showAddressJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
+
+			<p/>
+
+				<s:form action="submitAddressesInfo" namespace="/conversion">
+					<s:iterator value="%{new int[3]}" status="stat">
+						<s:textfield label="%{'Address '+#stat.index}"
+								     name="%{'addresses(\\'id'+#stat.index+'\\').address'}" />
+					</s:iterator>
+					<s:submit cssClass="btn btn-primary"/>
+				</s:form>
+
+				<%--
+					The following is how its done statically
+				--%>
+				<%--
+				<s:form action="submitAddressInfo" namespace="/conversion">
+					<s:textfield label="Address 0"
+								 name="addresses('id0')" />
+					<s:textfield label="Address 1"
+								 name="addresses('id1')" />
+					<s:textfield label="Address 2"
+								 name="addresses('id2')" />
+					<s:submit />
+				</s:form>
+				--%>
+
+		</div>
+	</div>
+</div>
+
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/enterOperations.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/enterOperations.jsp b/apps/showcase/src/main/webapp/WEB-INF/conversion/enterOperations.jsp
new file mode 100644
index 0000000..817e81f
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/enterOperations.jsp
@@ -0,0 +1,38 @@
+<%@taglib prefix="s" uri="/struts-tags" %>
+<html>
+<head>
+	<title>Struts2 Showcase - Conversion - Tiger 5 Enum</title>
+</head>
+<body>
+<div class="page-header">
+	<h1>Conversion - Tiger 5 Enum</h1>
+</div>
+
+<div class="container-fluid">
+	<div class="row-fluid">
+		<div class="span12">
+
+
+			See the jsp code <s:url var="url" action="showEnumJspCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
+			See the code for OperationsEnum.java <s:url var="url" action="showOperationsEnumJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
+			See the code for OperationsEnumAction.java <s:url var="url" action="showOperationEnumActionJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
+			See the code for EnumTypeConverter.java  <s:url var="url" action="showEnumTypeConverterJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
+			See the properties for OperationsEnumAction-conversion.properties <s:url var="url" action="showOperationsEnumActionConversionProperties" namespace="/conversion" /><s:a href="%{#url}">here.</s:a>
+			<br/>
+			<br/>
+
+				<s:form action="submitOperationEnumInfo" namespace="/conversion">
+					<s:checkboxlist label="Operations"
+									name="selectedOperations"
+									list="%{availableOperations}"
+									listKey="name()"
+									listValue="name()"
+									/>
+					<s:submit cssClass="btn btn-primary"/>
+				</s:form>
+
+		</div>
+	</div>
+</div>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/enterPersonInfo.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/enterPersonInfo.jsp b/apps/showcase/src/main/webapp/WEB-INF/conversion/enterPersonInfo.jsp
new file mode 100644
index 0000000..ba30a79
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/enterPersonInfo.jsp
@@ -0,0 +1,67 @@
+<%@taglib prefix="s" uri="/struts-tags" %>
+<html>
+<head>
+	<title>Struts2 Showcase - Conversion - Populate Object into Struts' action List</title>
+</head>
+<body>
+<div class="page-header">
+	<h1>Conversion - Populate Object into Struts' action List</h1>
+</div>
+
+<div class="container-fluid">
+	<div class="row-fluid">
+		<div class="span12">
+
+
+			<p/>
+				An example populating a list of object (Person.java) into Struts' action (PersonAction.java)
+			<p/>
+
+			See the jsp code <s:url var="url" action="showPersonJspCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
+			See the code for PersonAction.java <s:url var="url" action="showPersonActionJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
+			See the code for Person.java <s:url var="url" action="showPersonJavaCode" namespace="/conversion" /><s:a href="%{#url}">here.</s:a><br/>
+
+			<p/>
+
+			<s:actionerror cssClass="alert alert-error"/>
+			<s:fielderror cssClass="alert alert-error"/>
+
+			<s:form action="submitPersonInfo" namespace="/conversion" method="post">
+			    <%--
+			        The following is done Dynamically
+			    --%>
+			    <s:iterator value="new int[3]" status="stat">
+			        <s:textfield    label="%{'Person '+#stat.index+' Name'}"
+			                        name="%{'persons['+#stat.index+'].name'}" />
+			        <s:textfield    label="%{'Person '+#stat.index+' Age'}"
+			                        name="%{'persons['+#stat.index+'].age'}" />
+			    </s:iterator>
+
+
+
+			    <%--
+			    The following is done statically:-
+			    --%>
+			    <%--
+			    <s:textfield    label="Person 1 Name"
+			                    name="persons[0].name" />
+			    <s:textfield    label="Person 1 Age"
+			                    name="persons[0].age" />
+			    <s:textfield    label="Person 2 Name"
+			                    name="persons[1].name" />
+			    <s:textfield    label="Person 2 Age"
+			                    name="persons[1].age" />
+			    <s:textfield    label="Person 3 Name"
+			                    name="persons[2].name" />
+			    <s:textfield    label="Person 3 Age"
+			                    name="persons[2].age" />
+			    --%>
+
+			    <s:submit cssClass="btn btn-primary"/>
+			</s:form>
+
+		</div>
+	</div>
+</div>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/index.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/conversion/index.jsp
new file mode 100644
index 0000000..805d490
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/index.jsp
@@ -0,0 +1,35 @@
+<%@taglib prefix="s" uri="/struts-tags" %>
+
+<html>
+<head>
+	<title>Struts2 Showcase - Conversion</title>
+</head>
+<body>
+<div class="page-header">
+	<h1>Conversion</h1>
+</div>
+
+<div class="container-fluid">
+	<div class="row-fluid">
+		<div class="span12">
+
+			<ul>
+			    <li>
+			        <s:url var="url" action="enterPersonsInfo" namespace="/conversion" />
+			        <s:a href="%{#url}">Populate into the Struts action class a List of Person.java Object</s:a>
+			    </li>
+			    <li>
+			        <s:url var="url" action="enterAddressesInfo" namespace="/conversion" />
+			        <s:a href="%{#url}">Populate into Struts action class a Set of Address.java Object</s:a>
+			    </li>
+			    <li>
+			        <s:url var="url" action="enterOperationEnumInfo" namespace="/conversion" />
+			        <s:a href="%{#url}">Populate into Struts action class a List of OperationEnum.java (Java5 Enum)</s:a>
+			    </li>
+			</ul>
+
+		</div>
+	</div>
+</div>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts/blob/65eb9751/apps/showcase/src/main/webapp/WEB-INF/conversion/showAddressInfo.jsp
----------------------------------------------------------------------
diff --git a/apps/showcase/src/main/webapp/WEB-INF/conversion/showAddressInfo.jsp b/apps/showcase/src/main/webapp/WEB-INF/conversion/showAddressInfo.jsp
new file mode 100644
index 0000000..8f2c0c4
--- /dev/null
+++ b/apps/showcase/src/main/webapp/WEB-INF/conversion/showAddressInfo.jsp
@@ -0,0 +1,21 @@
+<%@taglib prefix="s" uri="/struts-tags" %>
+<html>
+<head>
+	<title>Struts2 Showcase - Conversion - Populate into Struts action class a Set of Address.java Object</title>
+</head>
+<body>
+<div class="page-header">
+	<h1>Conversion - Populate into Struts action class a Set of Address.java Object</h1>
+</div>
+
+<div class="container-fluid">
+	<div class="row-fluid">
+		<div class="span12">
+			<s:iterator value="%{addresses}">
+				<s:property value="%{top.id}" /> -> <s:property value="%{top.address}" /><br/>
+			</s:iterator>
+		</div>
+	</div>
+</div>
+</body>
+</html>
\ No newline at end of file


Mime
View raw message