You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2014/03/06 22:36:23 UTC
[13/20] Moves showcase related JSPs under WEB-INF
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