You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by dd...@apache.org on 2007/01/11 20:20:52 UTC
svn commit: r495339 [1/2] - in /struts/struts2/trunk:
apps/showcase/src/main/java/org/apache/struts2/showcase/
apps/showcase/src/main/resources/ apps/showcase/src/main/webapp/tags/ui/
core/src/main/java/org/apache/struts2/components/ core/src/main/java...
Author: ddewolf
Date: Thu Jan 11 11:20:51 2007
New Revision: 495339
URL: http://svn.apache.org/viewvc?view=rev&rev=495339
Log:
First draft of an inputtransfer select component; Allows text --> select; Similar to OptionTransferSelect
Added:
struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/MoreSelectsAction.java (with props)
struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelects.jsp (with props)
struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelectsSubmit.jsp (with props)
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/InputTransferSelect.java (with props)
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/InputTransferSelectModel.java (with props)
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTag.java (with props)
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java (with props)
struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/inputtransferselect.js
struts/struts2/trunk/core/src/main/resources/template/css_xhtml/inputtransferselect.ftl
struts/struts2/trunk/core/src/main/resources/template/simple/inputtransferselect.ftl
struts/struts2/trunk/core/src/main/resources/template/xhtml/inputtransferselect.ftl
struts/struts2/trunk/core/src/site/resources/tags/inputtransferselect.html
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTagTest.java (with props)
struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/inputtransferselect-1.txt
Modified:
struts/struts2/trunk/apps/showcase/src/main/resources/struts-tags-ui.xml
struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/index.jsp
struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselect.jsp
struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselectSubmit.jsp
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java
struts/struts2/trunk/core/src/main/resources/META-INF/struts-tags.tld
struts/struts2/trunk/core/src/main/resources/template/ajax/form-close.ftl
struts/struts2/trunk/core/src/main/resources/template/simple/form-close.ftl
struts/struts2/trunk/core/src/site/resources/tags/doubleselect.html
struts/struts2/trunk/core/src/site/resources/tags/optiontransferselect.html
Added: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/MoreSelectsAction.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/MoreSelectsAction.java?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/MoreSelectsAction.java (added)
+++ struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/MoreSelectsAction.java Thu Jan 11 11:20:51 2007
@@ -0,0 +1,115 @@
+package org.apache.struts2.showcase;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+import java.util.List;
+import java.util.Map;
+import java.util.LinkedHashMap;
+import java.util.ArrayList;
+
+/**
+ */
+public class MoreSelectsAction extends ActionSupport {
+
+
+ private List _prioritisedFavouriteCartoonCharacters;
+ private List _prioritisedFavouriteCars;
+ private List _prioritisedFavouriteCountries;
+ private List favouriteNumbers;
+
+
+ // Cartoon Characters
+ public Map getDefaultFavouriteCartoonCharacters() {
+ Map m = new LinkedHashMap();
+ m.put("heMan", "He-Man");
+ m.put("popeye", "Popeye");
+ m.put("mockeyMouse", "Mickey Mouse");
+ return m;
+ }
+
+
+ // Cars
+ public Map getDefaultFavouriteCars() {
+ Map m = new LinkedHashMap();
+ m.put("alfaRomeo", "Alfa Romeo");
+ m.put("Toyota", "Toyota");
+ m.put("Mitsubitshi", "Mitsubitshi");
+ return m;
+ }
+
+
+
+ // Countries
+ public Map getDefaultFavouriteCountries() {
+ Map m = new LinkedHashMap();
+ m.put("england", "England");
+ m.put("america", "America");
+ m.put("brazil", "Brazil");
+ return m;
+ }
+
+ public List getDefaultFavouriteNumbers() {
+ List list = new ArrayList();
+ list.add("Three");
+ list.add("Seven");
+ return list;
+ }
+
+
+
+ public List getPrioritisedFavouriteCartoonCharacters() {
+ return _prioritisedFavouriteCartoonCharacters;
+ }
+ public void setPrioritisedFavouriteCartoonCharacters(List prioritisedFavouriteCartoonCharacters) {
+ _prioritisedFavouriteCartoonCharacters = prioritisedFavouriteCartoonCharacters;
+ }
+
+ public List getPrioritisedFavouriteCars() {
+ return _prioritisedFavouriteCars;
+ }
+ public void setPrioritisedFavouriteCars(List prioritisedFavouriteCars) {
+ _prioritisedFavouriteCars = prioritisedFavouriteCars;
+ }
+
+
+ public List getPrioritisedFavouriteCountries() {
+ return _prioritisedFavouriteCountries;
+ }
+ public void setPrioritisedFavouriteCountries(List prioritisedFavouriteCountries) {
+ _prioritisedFavouriteCountries = prioritisedFavouriteCountries;
+ }
+
+ public List getFavouriteNumbers() {
+ return favouriteNumbers;
+ }
+
+ public void setFavouriteNumbers(List favouriteNumbers) {
+ this.favouriteNumbers = favouriteNumbers;
+ }
+
+ public Map getAvailableCities() {
+ Map map = new LinkedHashMap();
+ map.put("boston", "Boston");
+ map.put("new york", "New York");
+ map.put("london", "London");
+ map.put("rome", "Rome");
+ return map;
+ }
+
+ public List getDefaultFavouriteCities() {
+ List list = new ArrayList();
+ list.add("boston");
+ list.add("rome");
+ return list;
+ }
+
+ // actions
+
+ public String input() throws Exception {
+ return SUCCESS;
+ }
+
+ public String submit() throws Exception {
+ return SUCCESS;
+ }
+}
Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/MoreSelectsAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/MoreSelectsAction.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev
Modified: struts/struts2/trunk/apps/showcase/src/main/resources/struts-tags-ui.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/resources/struts-tags-ui.xml?view=diff&rev=495339&r1=495338&r2=495339
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/resources/struts-tags-ui.xml (original)
+++ struts/struts2/trunk/apps/showcase/src/main/resources/struts-tags-ui.xml Thu Jan 11 11:20:51 2007
@@ -22,6 +22,7 @@
<result type="velocity">exampleSubmited.vm</result>
<result name="input" type="velocity">example.vm</result>
</action>
+
<action name="lotsOfOptiontransferselect" class="org.apache.struts2.showcase.LotsOfOptiontransferselectAction" method="input">
<result>lotsOfOptiontransferselect.jsp</result>
</action>
@@ -29,7 +30,15 @@
<result name="input">lotsOfOptiontransferselect.jsp</result>
<result>lotsOfOptiontransferselectSubmit.jsp</result>
</action>
-
+
+ <action name="moreSelects" class="org.apache.struts2.showcase.MoreSelectsAction" method="input">
+ <result>moreSelects.jsp</result>
+ </action>
+ <action name="moreSelectsSubmit" class="org.apache.struts2.showcase.MoreSelectsAction" method="submit">
+ <result name="input">moreSelects.jsp</result>
+ <result>moreSelectsSubmit.jsp</result>
+ </action>
+
<!-- START SNIPPET: treeExampleDynamicXWorkXml -->
<action name="showDynamicTreeAction" class="org.apache.struts2.showcase.ShowDynamicTreeAction">
Modified: struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/index.jsp
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/index.jsp?view=diff&rev=495339&r1=495338&r2=495339
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/index.jsp (original)
+++ struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/index.jsp Thu Jan 11 11:20:51 2007
@@ -11,6 +11,7 @@
<li><s:url id="url" namespace="/tags/ui" action="example" method="input" /><s:a href="%{url}">UI Example</s:a></li>
<li><s:url id="url" namespace="/tags/ui" action="exampleVelocity" method="input" /><s:a href="%{url}">UI Example (Velocity)</s:a></li>
<li><s:url id="url" namespace="/tags/ui" action="lotsOfOptiontransferselect" method="input" /><s:a href="%{url}">Option Transfer Select UI Example</s:a></li>
+ <li><s:url id="url" namespace="/tags/ui" action="moreSelects" method="input" /><s:a href="%{url}">More Select Box UI Examples</s:a></li>
<li><s:url id="url" namespace="/tags/ui" value="treeExampleStatic.jsp" /><s:a href="%{url}">Tree Example (static)</s:a>
<li><s:url id="url" namespace="/tags/ui" action="showDynamicTreeAction"/><s:a href="%{url}">Tree Example (dynamic)</s:a>
<li><s:url id="url" value="componentTagExample.jsp"/><s:a href="%{#url}">Component Tag Example</s:a>
Modified: struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselect.jsp
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselect.jsp?view=diff&rev=495339&r1=495338&r2=495339
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselect.jsp (original)
+++ struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselect.jsp Thu Jan 11 11:20:51 2007
@@ -85,48 +85,8 @@
allowSelectAll="false"
/>
<br/>
-
- <s:updownselect
- tooltip="Prioritized Your Favourite Cartoon Characters"
- label="Prioritised Favourite Cartoon Characters"
- list="defaultFavouriteCartoonCharacters"
- name="prioritisedFavouriteCartoonCharacters"
- headerKey="-1"
- headerValue="--- Please Order ---"
- emptyOption="true" />
-
- <br/>
-
- <s:updownselect
- tooltip="Prioritise Your Favourite Cars"
- label="Prioritised Favourite Cars"
- list="defaultFavouriteCars"
- name="prioritisedFavouriteCars"
- headerKey="-10"
- headerValue="--- Please Order ---" />
-
- <br/>
-
- <s:updownselect
- tooltip="Prioritised Your Favourite Countries"
- label="Prioritised Favourite Countries"
- list="defaultFavouriteCountries"
- name="prioritisedFavouriteCountries"
- emptyOption="true"
- value="{'england', 'brazil'}" />
-
- <br/>
-
- <s:select label="Favourite Cities"
- list="availableCities"
- name="favouriteCities"
- value="%{defaultFavouriteCities}"
- multiple="true" size="4"/>
-
- <s:submit value="Submit It" />
-
- <br/>
+ <s:submit value="Submit It" />
</s:form>
</body>
Modified: struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselectSubmit.jsp
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselectSubmit.jsp?view=diff&rev=495339&r1=495338&r2=495339
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselectSubmit.jsp (original)
+++ struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/lotsOfOptiontransferselectSubmit.jsp Thu Jan 11 11:20:51 2007
@@ -88,39 +88,6 @@
</s:iterator>
</td>
</tr>
-
- <tr>
- <td>Prioritised Favourite Cartoon Characters:</td>
- <td>
- <s:iterator value="prioritisedFavouriteCartoonCharacters" status="stat">
- <s:property value="%{#stat.count}" />.<s:property />
- </s:iterator>
- </td>
- </tr>
- <tr>
- <td>Prioritised Favourite Cars:</td>
- <td>
- <s:iterator value="prioritisedFavouriteCars" status="stat">
- <s:property value="%{#stat.count}" />.<s:property />
- </s:iterator>
- </td>
- </tr>
- <tr>
- <td>Prioritised Favourite Countries</td>
- <td>
- <s:iterator value="prioritisedFavouriteCountries" status="stat">
- <s:property value="%{#stat.count}" />.<s:property />
- </s:iterator>
- </td>
- </tr>
- <tr>
- <td>Favourite Cities</td>
- <td>
- <s:iterator value="favouriteCities" status="stat">
- <s:property value="%{#stat.count}" />.<s:property />
- </s:iterator>
- </td>
- </tr>
</table>
</body>
Added: struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelects.jsp
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelects.jsp?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelects.jsp (added)
+++ struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelects.jsp Thu Jan 11 11:20:51 2007
@@ -0,0 +1,61 @@
+<%@taglib prefix="s" uri="/struts-tags" %>
+
+<html>
+<head>
+<title>Show Case - Tags - UI Tags - Optiontransferselect</title>
+<s:head />
+</head>
+<body>
+
+<s:form action="moreSelectsSubmit" namespace="/tags/ui" method="post">
+
+ <s:updownselect
+ tooltip="Prioritized Your Favourite Cartoon Characters"
+ label="Prioritised Favourite Cartoon Characters"
+ list="defaultFavouriteCartoonCharacters"
+ name="prioritisedFavouriteCartoonCharacters"
+ headerKey="-1"
+ headerValue="--- Please Order ---"
+ emptyOption="true" />
+
+ <br/>
+
+ <s:updownselect
+ tooltip="Prioritise Your Favourite Cars"
+ label="Prioritised Favourite Cars"
+ list="defaultFavouriteCars"
+ name="prioritisedFavouriteCars"
+ headerKey="-10"
+ headerValue="--- Please Order ---" />
+
+ <br/>
+
+ <s:updownselect
+ tooltip="Prioritised Your Favourite Countries"
+ label="Prioritised Favourite Countries"
+ list="defaultFavouriteCountries"
+ name="prioritisedFavouriteCountries"
+ emptyOption="true"
+ value="{'england', 'brazil'}" />
+
+ <br/>
+
+ <s:inputtransferselect
+ list="defaultFavouriteNumbers"
+ name="favouriteNumbers"
+ label="Numbers"/>
+
+ <s:select label="Favourite Cities"
+ list="availableCities"
+ name="favouriteCities"
+ value="%{defaultFavouriteCities}"
+ multiple="true" size="4"/>
+
+ <s:submit value="Submit It" />
+
+ <br/>
+
+</s:form>
+
+</body>
+</html>
\ No newline at end of file
Propchange: struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelects.jsp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelects.jsp
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev
Added: struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelectsSubmit.jsp
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelectsSubmit.jsp?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelectsSubmit.jsp (added)
+++ struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelectsSubmit.jsp Thu Jan 11 11:20:51 2007
@@ -0,0 +1,53 @@
+<%@taglib prefix="s" uri="/struts-tags" %>
+
+<html>
+<head>
+<title>Showcase - Tags - UI Tags - Select Boxes Result</title>
+</head>
+<body>
+
+ <table>
+ <tr>
+ <td>Prioritised Favourite Cartoon Characters:</td>
+ <td>
+ <s:iterator value="prioritisedFavouriteCartoonCharacters" status="stat">
+ <s:property value="%{#stat.count}" />.<s:property />
+ </s:iterator>
+ </td>
+ </tr>
+ <tr>
+ <td>Prioritised Favourite Cars:</td>
+ <td>
+ <s:iterator value="prioritisedFavouriteCars" status="stat">
+ <s:property value="%{#stat.count}" />.<s:property />
+ </s:iterator>
+ </td>
+ </tr>
+ <tr>
+ <td>Prioritised Favourite Countries</td>
+ <td>
+ <s:iterator value="prioritisedFavouriteCountries" status="stat">
+ <s:property value="%{#stat.count}" />.<s:property />
+ </s:iterator>
+ </td>
+ </tr>
+ <tr>
+ <td>Favourite Cities</td>
+ <td>
+ <s:iterator value="favouriteCities" status="stat">
+ <s:property value="%{#stat.count}" />.<s:property />
+ </s:iterator>
+ </td>
+ </tr>
+ <tr>
+ <td>Favourite Numbers</td>
+ <td>
+ <s:iterator value="favouriteNumbers" status="stat">
+ <s:property value="%{#stat.count}" />.<s:property />
+ </s:iterator>
+ </td>
+ </tr>
+ </table>
+
+</body>
+</html>
Propchange: struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelectsSubmit.jsp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/struts2/trunk/apps/showcase/src/main/webapp/tags/ui/moreSelectsSubmit.jsp
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev
Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/InputTransferSelect.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/InputTransferSelect.java?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/InputTransferSelect.java (added)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/InputTransferSelect.java Thu Jan 11 11:20:51 2007
@@ -0,0 +1,319 @@
+package org.apache.struts2.components;
+
+import org.apache.struts.annotations.StrutsTag;
+import org.apache.struts.annotations.StrutsTagAttribute;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import com.opensymphony.xwork2.util.ValueStack;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+import java.util.LinkedHashMap;
+
+/**
+ * <!-- START SNIPPET: javadoc -->
+ *
+ * Create a input transfer select component which is basically an text input
+ * and <select ...> tag with buttons in the middle of them allowing text
+ * to be added to the transfer select. Will auto-select all its
+ * elements upon its containing form submision.
+ *
+ * <!-- END SNIPPET: javadoc -->
+ *
+ * <p/>
+ *
+ *
+ * <!-- START SNIPPET: notice -->
+ *
+ * NOTE: The id and doubleId need not be supplied as they will generated provided
+ * that the inputtransferselect tag is being used in a form tag. The generated id
+ * and doubleId will be <form_id>_<inputtransferselect_doubleName> and
+ * <form_id>_<inputtransferselect_doubleName> respectively.
+ *
+ * <!-- END SNIPPET: notice -->
+ *
+ * <p/>
+ *
+ * <pre>
+ * <!-- START SNIPPET: example -->
+ *
+ * <-- minimum configuration -->
+ * <s:inputtransferselect
+ * label="Favourite Cartoons Characters"
+ * name="cartoons"
+ * list="{'Popeye', 'He-Man', 'Spiderman'}"
+ * />
+ *
+ * <!-- END SNIPPET: example -->
+ * </pre>
+ *
+ */
+@StrutsTag(name="inputtransferselect", tldTagClass="org.apache.struts2.views.jsp.ui.InputTransferSelectTag", description="Renders an input form")
+public class InputTransferSelect extends ListUIBean {
+
+ private static final Log _log = LogFactory.getLog(InputTransferSelect.class);
+
+ private static final String TEMPLATE = "inputtransferselect";
+
+ protected String size;
+ protected String multiple;
+
+ protected String allowRemoveAll;
+ protected String allowUpDown;
+
+ protected String leftTitle;
+ protected String rightTitle;
+
+ protected String buttonCssClass;
+ protected String buttonCssStyle;
+
+ protected String addLabel;
+ protected String removeLabel;
+ protected String removeAllLabel;
+ protected String upLabel;
+ protected String downLabel;
+
+ protected String headerKey;
+ protected String headerValue;
+
+
+ public InputTransferSelect(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
+ super(stack, request, response);
+ }
+
+ protected String getDefaultTemplate() {
+ return TEMPLATE;
+ }
+
+
+ public void evaluateExtraParams() {
+ super.evaluateExtraParams();
+
+ if (size == null || size.trim().length() <= 0) {
+ addParameter("size", "5");
+ }
+
+ if (multiple == null || multiple.trim().length() <= 0) {
+ addParameter("multiple", Boolean.TRUE);
+ }
+
+ // allowUpDown
+ addParameter("allowUpDown", allowUpDown != null ? findValue(allowUpDown, Boolean.class) : Boolean.TRUE);
+
+ // allowRemoveAll
+ addParameter("allowRemoveAll", allowRemoveAll != null ? findValue(allowRemoveAll, Boolean.class) : Boolean.TRUE);
+
+
+ // leftTitle
+ if (leftTitle != null) {
+ addParameter("leftTitle", findValue(leftTitle, String.class));
+ }
+
+ // rightTitle
+ if (rightTitle != null) {
+ addParameter("rightTitle", findValue(rightTitle, String.class));
+ }
+
+
+ // buttonCssClass
+ if (buttonCssClass != null && buttonCssClass.trim().length() > 0) {
+ addParameter("buttonCssClass", buttonCssClass);
+ }
+
+ // buttonCssStyle
+ if (buttonCssStyle != null && buttonCssStyle.trim().length() > 0) {
+ addParameter("buttonCssStyle", buttonCssStyle);
+ }
+
+ // addLabel
+ addParameter("addLabel", addLabel != null ? findValue(addLabel, String.class) : "->" );
+
+ // removeLabel
+ addParameter("removeLabel", removeLabel != null ? findValue(removeLabel, String.class) : "<-");
+
+ // removeAllLabel
+ addParameter("removeAllLabel", removeAllLabel != null ? findValue(removeAllLabel, String.class) : "<<--");
+
+
+ // upLabel
+ addParameter("upLabel", upLabel != null ? findValue(upLabel, String.class) : "^");
+
+
+ // leftDownLabel
+ addParameter("downLabel", downLabel != null ? findValue(downLabel, String.class) : "v");
+
+ if ((headerKey != null) && (headerValue != null)) {
+ addParameter("headerKey", findString(headerKey));
+ addParameter("headerValue", findString(headerValue));
+ }
+
+
+
+ // inform the form component our select tag infos, so they know how to select
+ // its elements upon onsubmit
+ Form formAncestor = (Form) findAncestor(Form.class);
+ if (formAncestor != null) {
+
+ // inform ancestor form that we are having a customOnsubmit (see form-close.ftl [simple theme])
+ enableAncestorFormCustomOnsubmit();
+
+
+ // key -> select tag id, value -> headerKey (if exists)
+ Map formInputtransferselectIds = (Map) formAncestor.getParameters().get("inputtransferselectIds");
+
+ // init lists
+ if (formInputtransferselectIds == null) {
+ formInputtransferselectIds = new LinkedHashMap();
+ }
+
+ // id
+ String tmpId = (String) getParameters().get("id");
+ String tmpHeaderKey = (String) getParameters().get("headerKey");
+ if (tmpId != null && (! formInputtransferselectIds.containsKey(tmpId))) {
+ formInputtransferselectIds.put(tmpId, tmpHeaderKey);
+ }
+
+ formAncestor.getParameters().put("inputtransferselectIds", formInputtransferselectIds);
+
+ }
+ else {
+ _log.warn("form enclosing inputtransferselect "+this+" not found, auto select upon form submit of inputtransferselect will not work");
+ }
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ @StrutsTagAttribute(description="the size of the select box")
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getMultiple() {
+ return multiple;
+ }
+
+ @StrutsTagAttribute(description="Determine whether or not multiple entries are shown")
+ public void setMultiple(String multiple) {
+ this.multiple = multiple;
+ }
+
+ public String getAllowRemoveAll() {
+ return allowRemoveAll;
+ }
+
+ @StrutsTagAttribute(description="Determine whether the remove all button will display")
+ public void setAllowRemoveAll(String allowRemoveAll) {
+ this.allowRemoveAll = allowRemoveAll;
+ }
+
+ public String getAllowUpDown() {
+ return allowUpDown;
+ }
+
+ @StrutsTagAttribute(description="Determine whether items in the list can be reordered")
+ public void setAllowUpDown(String allowUpDown) {
+ this.allowUpDown = allowUpDown;
+ }
+
+ public String getLeftTitle() {
+ return leftTitle;
+ }
+
+ @StrutsTagAttribute(description="the left hand title")
+ public void setLeftTitle(String leftTitle) {
+ this.leftTitle = leftTitle;
+ }
+
+ public String getRightTitle() {
+ return rightTitle;
+ }
+
+ @StrutsTagAttribute(description="the right hand title")
+ public void setRightTitle(String rightTitle) {
+ this.rightTitle = rightTitle;
+ }
+
+ public String getButtonCssClass() {
+ return buttonCssClass;
+ }
+
+ @StrutsTagAttribute(description="the css class used for rendering buttons")
+ public void setButtonCssClass(String buttonCssClass) {
+ this.buttonCssClass = buttonCssClass;
+ }
+
+ public String getButtonCssStyle() {
+ return buttonCssStyle;
+ }
+
+ @StrutsTagAttribute(description="the css style used for rendering buttons")
+ public void setButtonCssStyle(String buttonCssStyle) {
+ this.buttonCssStyle = buttonCssStyle;
+ }
+
+ public String getAddLabel() {
+ return addLabel;
+ }
+
+ @StrutsTagAttribute(description="the label used for the add button")
+ public void setAddLabel(String addLabel) {
+ this.addLabel = addLabel;
+ }
+
+ public String getRemoveLabel() {
+ return removeLabel;
+ }
+
+ @StrutsTagAttribute(description="the label used for the remove button")
+ public void setRemoveLabel(String removeLabel) {
+ this.removeLabel = removeLabel;
+ }
+
+ public String getRemoveAllLabel() {
+ return removeAllLabel;
+ }
+
+ @StrutsTagAttribute(description="the label used for the remove all button")
+ public void setRemoveAllLabel(String removeAllLabel) {
+ this.removeAllLabel = removeAllLabel;
+ }
+
+ public String getUpLabel() {
+ return upLabel;
+ }
+
+ @StrutsTagAttribute(description="the label used for the up button")
+ public void setUpLabel(String upLabel) {
+ this.upLabel = upLabel;
+ }
+
+ public String getDownLabel() {
+ return downLabel;
+ }
+
+ @StrutsTagAttribute(description="the label used for the down button")
+ public void setDownLabel(String downLabel) {
+ this.downLabel = downLabel;
+ }
+
+ public String getHeaderKey() {
+ return headerKey;
+ }
+
+ @StrutsTagAttribute(description="the header key of the select box")
+ public void setHeaderKey(String headerKey) {
+ this.headerKey = headerKey;
+ }
+
+ public String getHeaderValue() {
+ return headerValue;
+ }
+
+ @StrutsTagAttribute(description="the header value of the select box")
+ public void setHeaderValue(String headerValue) {
+ this.headerValue = headerValue;
+ }
+}
Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/InputTransferSelect.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/InputTransferSelect.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev
Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/InputTransferSelectModel.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/InputTransferSelectModel.java?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/InputTransferSelectModel.java (added)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/InputTransferSelectModel.java Thu Jan 11 11:20:51 2007
@@ -0,0 +1,24 @@
+package org.apache.struts2.views.freemarker.tags;
+
+import com.opensymphony.xwork2.util.ValueStack;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts2.components.Component;
+import org.apache.struts2.components.InputTransferSelect;
+
+/**
+ * @see org.apache.struts2.components.InputTransferSelect
+ */
+public class InputTransferSelectModel extends TagModel {
+
+ public InputTransferSelectModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
+ super(stack, req, res);
+ }
+
+ protected Component getBean() {
+ return new InputTransferSelect(stack, req, res);
+ }
+
+}
Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/InputTransferSelectModel.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/InputTransferSelectModel.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java?view=diff&rev=495339&r1=495338&r2=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java Thu Jan 11 11:20:51 2007
@@ -24,6 +24,7 @@
import javax.servlet.http.HttpServletResponse;
import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.struts2.components.InputTransferSelect;
/**
* Provides @s.tag access for various tags.
@@ -81,6 +82,7 @@
protected ElseModel elseModel;
protected ElseIfModel elseIfModel;
protected AutocompleterModel autocompleterModel;
+ protected InputTransferSelectModel inputtransferselect;
public StrutsModels(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
@@ -463,4 +465,13 @@
}
return elseIfModel;
}
+
+
+ public InputTransferSelectModel getInputtransferselect() {
+ if (inputtransferselect == null) {
+ inputtransferselect = new InputTransferSelectModel(stack, req, res);
+ }
+ return inputtransferselect;
+ }
+
}
Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTag.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTag.java?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTag.java (added)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTag.java Thu Jan 11 11:20:51 2007
@@ -0,0 +1,185 @@
+package org.apache.struts2.views.jsp.ui;
+
+import org.apache.struts2.components.Component;
+import org.apache.struts2.components.InputTransferSelect;
+import com.opensymphony.xwork2.util.ValueStack;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * InputTransferSelect jsp tag.
+ */
+public class InputTransferSelectTag extends AbstractListTag {
+
+ private static final long serialVersionUID = 250474334495763536L;
+
+ protected String size;
+ protected String multiple;
+
+ protected String allowRemoveAll;
+ protected String allowUpDown;
+
+ protected String leftTitle;
+ protected String rightTitle;
+
+ protected String buttonCssClass;
+ protected String buttonCssStyle;
+
+ protected String addLabel;
+ protected String removeLabel;
+ protected String removeAllLabel;
+ protected String upLabel;
+ protected String downLabel;
+
+ protected String headerKey;
+ protected String headerValue;
+
+ public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
+ return new InputTransferSelect(stack, req, res);
+ }
+
+ protected void populateParams() {
+ super.populateParams();
+
+ InputTransferSelect inputTransferSelect = (InputTransferSelect) component;
+ inputTransferSelect.setSize(size);
+ inputTransferSelect.setMultiple(multiple);
+ inputTransferSelect.setAllowRemoveAll(allowRemoveAll);
+ inputTransferSelect.setAllowUpDown(allowUpDown);
+ inputTransferSelect.setLeftTitle(leftTitle);
+ inputTransferSelect.setRightTitle(rightTitle);
+
+ inputTransferSelect.setButtonCssClass(buttonCssClass);
+ inputTransferSelect.setButtonCssStyle(buttonCssStyle);
+
+ inputTransferSelect.setAddLabel(addLabel);
+ inputTransferSelect.setRemoveLabel(removeLabel);
+ inputTransferSelect.setRemoveAllLabel(removeAllLabel);
+ inputTransferSelect.setUpLabel(upLabel);
+ inputTransferSelect.setDownLabel(downLabel);
+ inputTransferSelect.setHeaderKey(headerKey);
+ inputTransferSelect.setHeaderValue(headerValue);
+ }
+
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getMultiple() {
+ return multiple;
+ }
+
+ public void setMultiple(String multiple) {
+ this.multiple = multiple;
+ }
+
+ public String getAllowRemoveAll() {
+ return allowRemoveAll;
+ }
+
+ public void setAllowRemoveAll(String allowRemoveAll) {
+ this.allowRemoveAll = allowRemoveAll;
+ }
+
+ public String getAllowUpDown() {
+ return allowUpDown;
+ }
+
+ public void setAllowUpDown(String allowUpDown) {
+ this.allowUpDown = allowUpDown;
+ }
+
+ public String getLeftTitle() {
+ return leftTitle;
+ }
+
+ public void setLeftTitle(String leftTitle) {
+ this.leftTitle = leftTitle;
+ }
+
+ public String getRightTitle() {
+ return rightTitle;
+ }
+
+ public void setRightTitle(String rightTitle) {
+ this.rightTitle = rightTitle;
+ }
+
+ public String getButtonCssClass() {
+ return buttonCssClass;
+ }
+
+ public void setButtonCssClass(String buttonCssClass) {
+ this.buttonCssClass = buttonCssClass;
+ }
+
+ public String getButtonCssStyle() {
+ return buttonCssStyle;
+ }
+
+ public void setButtonCssStyle(String buttonCssStyle) {
+ this.buttonCssStyle = buttonCssStyle;
+ }
+
+ public String getAddLabel() {
+ return addLabel;
+ }
+
+ public void setAddLabel(String addLabel) {
+ this.addLabel = addLabel;
+ }
+
+ public String getRemoveLabel() {
+ return removeLabel;
+ }
+
+ public void setRemoveLabel(String removeLabel) {
+ this.removeLabel = removeLabel;
+ }
+
+ public String getRemoveAllLabel() {
+ return removeAllLabel;
+ }
+
+ public void setRemoveAllLabel(String removeAllLabel) {
+ this.removeAllLabel = removeAllLabel;
+ }
+
+ public String getUpLabel() {
+ return upLabel;
+ }
+
+ public void setUpLabel(String upLabel) {
+ this.upLabel = upLabel;
+ }
+
+ public String getDownLabel() {
+ return downLabel;
+ }
+
+ public void setDownLabel(String downLabel) {
+ this.downLabel = downLabel;
+ }
+
+ public String getHeaderKey() {
+ return headerKey;
+ }
+
+ public void setHeaderKey(String headerKey) {
+ this.headerKey = headerKey;
+ }
+
+ public String getHeaderValue() {
+ return headerValue;
+ }
+
+ public void setHeaderValue(String headerValue) {
+ this.headerValue = headerValue;
+ }
+}
Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTag.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTag.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev
Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java (added)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java Thu Jan 11 11:20:51 2007
@@ -0,0 +1,23 @@
+package org.apache.struts2.views.velocity.components;
+
+import org.apache.struts2.components.Component;
+import org.apache.struts2.components.InputTransferSelect;
+import com.opensymphony.xwork2.util.ValueStack;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @see org.apache.struts2.components.InputTransferSelect
+ */
+public class InputTransferSelectDirective extends AbstractDirective {
+
+ public String getBeanName() {
+ return "inputtransferselect";
+ }
+
+ protected Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
+ return new InputTransferSelect(stack, req, res);
+ }
+
+}
Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev
Modified: struts/struts2/trunk/core/src/main/resources/META-INF/struts-tags.tld
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/META-INF/struts-tags.tld?view=diff&rev=495339&r1=495338&r2=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/META-INF/struts-tags.tld (original)
+++ struts/struts2/trunk/core/src/main/resources/META-INF/struts-tags.tld Thu Jan 11 11:20:51 2007
@@ -2762,7 +2762,7 @@
<name>doubleListKey</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
- <description><![CDATA[Set the list key of the second attribute]]></description>
+ <description><![CDATA[The key expression to use for second list]]></description>
</attribute>
<attribute>
<name>doubleListValue</name>
@@ -4506,6 +4506,318 @@
</attribute>
</tag>
<tag>
+ <name>inputtransferselect</name>
+ <tag-class>org.apache.struts2.views.jsp.ui.InputTransferSelectTag</tag-class>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Renders an input form]]></description>
+ <attribute>
+ <name>accesskey</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html accesskey attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>addLabel</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the label used for the add button]]></description>
+ </attribute>
+ <attribute>
+ <name>allowRemoveAll</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Determine whether the remove all button will display]]></description>
+ </attribute>
+ <attribute>
+ <name>allowUpDown</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Determine whether items in the list can be reordered]]></description>
+ </attribute>
+ <attribute>
+ <name>buttonCssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the css class used for rendering buttons]]></description>
+ </attribute>
+ <attribute>
+ <name>buttonCssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the css style used for rendering buttons]]></description>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[The css class to use for element]]></description>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[The css style definitions for element ro use]]></description>
+ </attribute>
+ <attribute>
+ <name>disabled</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>downLabel</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the label used for the down button]]></description>
+ </attribute>
+ <attribute>
+ <name>headerKey</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the header key of the select box]]></description>
+ </attribute>
+ <attribute>
+ <name>headerValue</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the header value of the select box]]></description>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
+ </attribute>
+ <attribute>
+ <name>key</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the key (name, value, label) for this particular component]]></description>
+ </attribute>
+ <attribute>
+ <name>label</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Label expression used for rendering a element specific label]]></description>
+ </attribute>
+ <attribute>
+ <name>labelposition</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Define label position of form element (top/left)]]></description>
+ </attribute>
+ <attribute>
+ <name>leftTitle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the left hand title]]></description>
+ </attribute>
+ <attribute>
+ <name>list</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option 'value' parameter and the Map value will become the option body.]]></description>
+ </attribute>
+ <attribute>
+ <name>listKey</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[ Property of list objects to get field value from]]></description>
+ </attribute>
+ <attribute>
+ <name>listValue</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Property of list objects to get field content from]]></description>
+ </attribute>
+ <attribute>
+ <name>multiple</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Determine whether or not multiple entries are shown]]></description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[The name to set for element]]></description>
+ </attribute>
+ <attribute>
+ <name>onblur</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[ Set the html onblur attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onchange</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onclick</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>ondblclick</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html ondblclick attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onfocus</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onfocus attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onkeydown</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onkeydown attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onkeypress</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onkeypress attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onkeyup</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onkeyup attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onmousedown</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onmousedown attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onmousemove</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onmousemove attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onmouseout</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onmouseout attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onmouseover</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onmouseover attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onmouseup</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onmouseup attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>onselect</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html onselect attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>removeAllLabel</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the label used for the remove all button]]></description>
+ </attribute>
+ <attribute>
+ <name>removeLabel</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the label used for the remove button]]></description>
+ </attribute>
+ <attribute>
+ <name>required</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[If set to true, the rendered element will indicate that input is required]]></description>
+ </attribute>
+ <attribute>
+ <name>requiredposition</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Define required position of required form element (left|right)]]></description>
+ </attribute>
+ <attribute>
+ <name>rightTitle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the right hand title]]></description>
+ </attribute>
+ <attribute>
+ <name>size</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the size of the select box]]></description>
+ </attribute>
+ <attribute>
+ <name>tabindex</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html tabindex attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>template</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[The template (other than default) to use for rendering the element]]></description>
+ </attribute>
+ <attribute>
+ <name>templateDir</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[The template directory.]]></description>
+ </attribute>
+ <attribute>
+ <name>theme</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[The theme (other than default) to use for rendering the element]]></description>
+ </attribute>
+ <attribute>
+ <name>title</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the html title attribute on rendered html element]]></description>
+ </attribute>
+ <attribute>
+ <name>tooltip</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the tooltip of this particular component]]></description>
+ </attribute>
+ <attribute>
+ <name>tooltipConfig</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Set the tooltip configuration]]></description>
+ </attribute>
+ <attribute>
+ <name>upLabel</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[the label used for the up button]]></description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description><![CDATA[Preset the value of input element.]]></description>
+ </attribute>
+ </tag>
+ <tag>
<name>iterator</name>
<tag-class>org.apache.struts2.views.jsp.IteratorTag</tag-class>
<body-content>JSP</body-content>
@@ -4958,7 +5270,7 @@
<name>doubleListKey</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
- <description><![CDATA[Set the list key of the second attribute]]></description>
+ <description><![CDATA[The key expression to use for second list]]></description>
</attribute>
<attribute>
<name>doubleListValue</name>
Added: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/inputtransferselect.js
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/inputtransferselect.js?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/inputtransferselect.js (added)
+++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/static/inputtransferselect.js Thu Jan 11 11:20:51 2007
@@ -0,0 +1,108 @@
+function addOption(objTextBox, objTargetElement) {
+ var value = objTextBox.value;
+ if(value != null && value != '') {
+ objTargetElement.options[objTargetElement.options.length] = new Option(value, value);
+ objTextBox.value = '';
+ }
+}
+
+function removeOptions(objTargetElement) {
+ for(var i=0;i<objTargetElement.options.length;i++) {
+ if(objTargetElement.options[i].selected) {
+ objTargetElement.options[i] = null;
+ }
+ }
+}
+
+function removeAllOptions(objTargetElement) {
+ while(objTargetElement.options.length != 0) {
+ objTargetElement.options[0] = null;
+ }
+}
+
+function selectAllOptionsExceptSome(objTargetElement, type, ptn) {
+ var test = compile(ptn);
+ for (var i = 0; i < objTargetElement.length; i++) {
+ var opt = objTargetElement.options[i];
+ if ((type == 'key' && !test(opt.value)) ||
+ (type == 'text' && !test(opt.text))) {
+ opt.selected = true;
+ } else {
+ opt.selected = false;
+ }
+ }
+ return false;
+}
+
+function compile(ptn) {
+ if (ptn != undefined) {
+ if (ptn == '' || !window.RegExp) {
+ return function(val) { return val == ptn; }
+ } else {
+ var reg = new RegExp(ptn);
+ return function (val) {
+ if (val == '') { // ignore empty option added by template
+ return true;
+ }
+ return reg.test(val); }
+ }
+ }
+ return function(val) { return false; }
+}
+
+function selectAllOptions(objTargetElement) {
+ for (var i = 0; i < objTargetElement.length; i++) {
+ if (objTargetElement.options[i].value != '') {
+ objTargetElement.options[i].selected = true;
+ }
+ }
+ return false;
+}
+
+function moveOptionUp(objTargetElement, type, ptn) {
+ var test = compile(ptn);
+ for (i=0; i<objTargetElement.length; i++) {
+ if (objTargetElement[i].selected) {
+ var v;
+ if (i != 0 && !objTargetElement[i-1].selected) {
+ if (type == 'key') {
+ v = objTargetElement[i-1].value
+ }
+ else {
+ v = objTargetElement[i-1].text;
+ }
+ if (!test(v)) {
+ swapOptions(objTargetElement,i,i-1);
+ }
+ }
+ }
+ }
+}
+
+function moveOptionDown(objTargetElement, type, ptn) {
+ var test = compile(ptn);
+ for (i=(objTargetElement.length-1); i>= 0; i--) {
+ if (objTargetElement[i].selected) {
+ var v;
+ if ((i != (objTargetElement.length-1)) && !objTargetElement[i+1].selected) {
+ if (type == 'key') {
+ v = objTargetElement[i].value
+ }
+ else {
+ v = objTargetElement[i].text;
+ }
+ if (!test(v)) {
+ swapOptions(objTargetElement,i,i+1);
+ }
+ }
+ }
+ }
+}
+
+function swapOptions(objTargetElement, first, second) {
+ var opt = objTargetElement.options;
+ var temp = new Option(opt[first].text, opt[first].value, opt[first].defaultSelected, opt[first].selected);
+ var temp2= new Option(opt[second].text, opt[second].value, opt[second].defaultSelected, opt[second].selected);
+ opt[first] = temp2;
+ opt[second] = temp;
+}
Modified: struts/struts2/trunk/core/src/main/resources/template/ajax/form-close.ftl
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/ajax/form-close.ftl?view=diff&rev=495339&r1=495338&r2=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/template/ajax/form-close.ftl (original)
+++ struts/struts2/trunk/core/src/main/resources/template/ajax/form-close.ftl Thu Jan 11 11:20:51 2007
@@ -22,6 +22,22 @@
});
</#list>
</#if>
+<#if (parameters.inputtransferselectIds?if_exists?size > 0)>
+ var containingForm = document.getElementById("${parameters.id}");
+ <#assign selectObjIds = parameters.inputtransferselectIds.keySet() />
+ <#list selectObjIds as selectObjectId>
+ dojo.event.connect(containingForm, "onsubmit",
+ function(evt) {
+ var selectObj = document.getElementById("${selectObjectId}");
+ <#if parameters.inputtransferselectIds.get(selectObjectId)?exists>
+ <#assign selectTagHeaderKey = parameters.inputtransferselectIds.get(selectObjectId)/>
+ selectAllOptionsExceptSome(selectObj, "key", "${selectTagHeaderKey}");
+ <#else>
+ selectAllOptionsExceptSome(selectObj, "key", "");
+ </#if>
+ });
+ </#list>
+</#if>
<#if (parameters.optiontransferselectDoubleIds?if_exists?size > 0)>
var containingForm = document.getElementById("${parameters.id}");
<#assign selectDoubleObjIds = parameters.optiontransferselectDoubleIds.keySet() />
Added: struts/struts2/trunk/core/src/main/resources/template/css_xhtml/inputtransferselect.ftl
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/css_xhtml/inputtransferselect.ftl?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/template/css_xhtml/inputtransferselect.ftl (added)
+++ struts/struts2/trunk/core/src/main/resources/template/css_xhtml/inputtransferselect.ftl Thu Jan 11 11:20:51 2007
@@ -0,0 +1,4 @@
+<#--include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" /-->
+<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/inputtransferselect.ftl" />
+<#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
Modified: struts/struts2/trunk/core/src/main/resources/template/simple/form-close.ftl
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/simple/form-close.ftl?view=diff&rev=495339&r1=495338&r2=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/template/simple/form-close.ftl (original)
+++ struts/struts2/trunk/core/src/main/resources/template/simple/form-close.ftl Thu Jan 11 11:20:51 2007
@@ -23,6 +23,22 @@
});
</#list>
</#if>
+<#if (parameters.inputtransferselectIds?if_exists?size > 0)>
+ var containingForm = document.getElementById("${parameters.id}");
+ <#assign selectObjIds = parameters.inputtransferselectIds.keySet() />
+ <#list selectObjIds as selectObjectId>
+ dojo.event.connect(containingForm, "onsubmit",
+ function(evt) {
+ var selectObj = document.getElementById("${selectObjectId}");
+ <#if parameters.inputtransferselectIds.get(selectObjectId)?exists>
+ <#assign selectTagHeaderKey = parameters.inputtransferselectIds.get(selectObjectId)/>
+ selectAllOptionsExceptSome(selectObj, "key", "${selectTagHeaderKey}");
+ <#else>
+ selectAllOptionsExceptSome(selectObj, "key", "");
+ </#if>
+ });
+ </#list>
+</#if>
<#if (parameters.optiontransferselectDoubleIds?if_exists?size > 0)>
var containingForm = document.getElementById("${parameters.id}");
<#assign selectDoubleObjIds = parameters.optiontransferselectDoubleIds.keySet() />
Added: struts/struts2/trunk/core/src/main/resources/template/simple/inputtransferselect.ftl
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/simple/inputtransferselect.ftl?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/template/simple/inputtransferselect.ftl (added)
+++ struts/struts2/trunk/core/src/main/resources/template/simple/inputtransferselect.ftl Thu Jan 11 11:20:51 2007
@@ -0,0 +1,103 @@
+<#if !stack.findValue("#inputtransferselect_js_included")?exists><#t/>
+ <script language="javascript" src="<@s.url value="/struts/inputtransferselect.js" encode='false' includeParams='none'/>"></script>
+ <#assign temporaryVariable = stack.setValue("#inputtransferselect_js_included", "true") /><#t/>
+</#if><#t/>
+<table border="0">
+<tr>
+<td>
+<#if parameters.leftTitle?exists><#t/>
+ <label for="leftTitle">${parameters.leftTitle}</label><br/>
+</#if><#t/>
+
+
+<input type="text"<#rt/>
+ name="${parameters.name?default("")?html}_input"<#rt/>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+<#if parameters.readonly?default(false)>
+ readonly="readonly"<#rt/>
+</#if>
+<#if parameters.tabindex?exists>
+ tabindex="${parameters.tabindex?html}"<#rt/>
+</#if>
+<#if parameters.id?exists>
+ id="${parameters.id?html}_input"<#rt/>
+</#if>
+<#if parameters.cssClass?exists>
+ class="${parameters.cssClass?html}"<#rt/>
+</#if>
+<#if parameters.cssStyle?exists>
+ style="${parameters.cssStyle?html}"<#rt/>
+</#if>
+<#if parameters.title?exists>
+ title="${parameters.title?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
+<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
+/>
+
+
+</td>
+<td valign="middle" align="center">
+ <#assign addLabel=parameters.addLabel?default("->")?html /><#t/>
+ <input type="button"
+ <#if parameters.buttonCssClass?exists><#t/>
+ class="${parameters.buttonCssClass?html}"
+ </#if><#t/>
+ <#if parameters.buttonCssStyle?exists>
+ style="${parameters.buttonCssStyle?html}"
+ </#if><#t/>
+ value="${addLabel}" onclick="addOption(document.getElementById('${parameters.id?html}_input'), document.getElementById('${parameters.id?html}'))" /><br/><br/>
+ <#t/>
+ <#assign removeLabel=parameters.removeLabel?default("<-")?html /><#t/>
+ <input type="button"
+ <#if parameters.buttonCssClass?exists><#t/>
+ class="${parameters.buttonCssClass?html}"
+ </#if><#t/>
+ <#if parameters.buttonCssStyle?exists>
+ style="${parameters.buttonCssStyle?html}"
+ </#if><#t/>
+ value="${removeLabel}" onclick="removeOptions(document.getElementById('${parameters.id?html}'))" /><br/><br/>
+ <#t/>
+ <#assign removeAllLabel=parameters.removeAllLabel?default("<<--")?html /><#t/>
+ <input type="button"
+ <#if parameters.buttonCssClass?exists><#t/>
+ class="${parameters.buttonCssClass?html}"
+ </#if><#t/>
+ <#if parameters.buttonCssStyle?exists>
+ style="${parameters.buttonCssStyle?html}"
+ </#if><#t/>
+ value="${removeAllLabel}" onclick="removeAllOptions(document.getElementById('${parameters.id?html}'))" /><br/><br/>
+</td>
+<td>
+<#if parameters.rightTitle?exists><#t/>
+ <label for="rightTitle">${parameters.rightTitle}</label><br/>
+</#if><#t/>
+<#include "/${parameters.templateDir}/simple/select.ftl" />
+<#if parameters.allowUpDown?default(true)>
+<input type="button"
+<#if parameters.headerKey?exists>
+ onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');"
+<#else>
+ onclick="moveOptionDown(document.getElementById('${parameters.id}'), 'key', '');"
+</#if>
+<#if parameters.downLabel?exists>
+ value="${parameters.downLabel?html}"
+</#if>
+/>
+<input type="button"
+<#if parameters.headerKey?exists>
+ onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '${parameters.headerKey}');"
+<#else>
+ onclick="moveOptionUp(document.getElementById('${parameters.id}'), 'key', '');"
+</#if>
+<#if parameters.upLabel?exists>
+ value="${parameters.upLabel?html}"
+</#if>
+/>
+</#if>
+</td>
+</tr>
+</table>
+
Added: struts/struts2/trunk/core/src/main/resources/template/xhtml/inputtransferselect.ftl
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/xhtml/inputtransferselect.ftl?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/template/xhtml/inputtransferselect.ftl (added)
+++ struts/struts2/trunk/core/src/main/resources/template/xhtml/inputtransferselect.ftl Thu Jan 11 11:20:51 2007
@@ -0,0 +1,3 @@
+<#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
+<#include "/${parameters.templateDir}/simple/inputtransferselect.ftl" />
+<#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /><#nt/>
Modified: struts/struts2/trunk/core/src/site/resources/tags/doubleselect.html
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/site/resources/tags/doubleselect.html?view=diff&rev=495339&r1=495338&r2=495339
==============================================================================
--- struts/struts2/trunk/core/src/site/resources/tags/doubleselect.html (original)
+++ struts/struts2/trunk/core/src/site/resources/tags/doubleselect.html Thu Jan 11 11:20:51 2007
@@ -137,7 +137,7 @@
<td align="left" valign="top"></td>
<td align="left" valign="top">true</td>
<td align="left" valign="top">String</td>
- <td align="left" valign="top">Set the list key of the second attribute</td>
+ <td align="left" valign="top">The key expression to use for second list</td>
</tr>
<tr>
<td align="left" valign="top">doubleListValue</td>
Added: struts/struts2/trunk/core/src/site/resources/tags/inputtransferselect.html
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/site/resources/tags/inputtransferselect.html?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/core/src/site/resources/tags/inputtransferselect.html (added)
+++ struts/struts2/trunk/core/src/site/resources/tags/inputtransferselect.html Thu Jan 11 11:20:51 2007
@@ -0,0 +1,442 @@
+<!--
+This file is generated during the build by processing Component class annotations.
+Please do not edit it directly.
+-->
+<html>
+ <head>
+ <title>inputtransferselect</title>
+ </head>
+
+ <body>
+ <h1>Tag Name: inputtransferselect</h1>
+ <h2>Description</h2>
+ <p>
+ <!-- START SNIPPET: tagdescription -->
+ Renders an input form
+ <!-- END SNIPPET: tagdescription -->
+ </p>
+
+ <h2>Attributes</h2>
+ <!-- START SNIPPET: tagattributes -->
+ <table width="100%">
+ <tr>
+ <th align="left" valign="top"><h4>Name</h4></th>
+ <th align="left" valign="top"><h4>Required</h4></th>
+ <th align="left" valign="top"><h4>Default</h4></th>
+ <th align="left" valign="top"><h4>Evaluated</h4></th>
+ <th align="left" valign="top"><h4>Type</h4></th>
+ <th align="left" valign="top"><h4>Description</h4></th>
+ </tr>
+ <tr>
+ <td align="left" valign="top">accesskey</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html accesskey attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">addLabel</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the label used for the add button</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">allowRemoveAll</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Determine whether the remove all button will display</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">allowUpDown</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Determine whether items in the list can be reordered</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">buttonCssClass</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the css class used for rendering buttons</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">buttonCssStyle</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the css style used for rendering buttons</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">cssClass</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">The css class to use for element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">cssStyle</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">The css style definitions for element ro use</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">disabled</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html disabled attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">downLabel</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the label used for the down button</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">headerKey</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the header key of the select box</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">headerValue</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the header value of the select box</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">id</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">id for referencing element. For UI and form tags it will be used as HTML id attribute</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">key</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the key (name, value, label) for this particular component</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">label</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Label expression used for rendering a element specific label</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">labelposition</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Define label position of form element (top/left)</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">leftTitle</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the left hand title</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">list</td>
+ <td align="left" valign="top"><strong>true</strong></td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Iterable source to populate from. If the list is a Map (key, value), the Map key will become the option 'value' parameter and the Map value will become the option body.</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">listKey</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top"> Property of list objects to get field value from</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">listValue</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Property of list objects to get field content from</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">multiple</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Determine whether or not multiple entries are shown</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">name</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">The name to set for element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onblur</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top"> Set the html onblur attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onchange</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onchange attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onclick</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onclick attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">ondblclick</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html ondblclick attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onfocus</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onfocus attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onkeydown</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onkeydown attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onkeypress</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onkeypress attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onkeyup</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onkeyup attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onmousedown</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onmousedown attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onmousemove</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onmousemove attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onmouseout</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onmouseout attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onmouseover</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onmouseover attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onmouseup</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onmouseup attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">onselect</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html onselect attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">removeAllLabel</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the label used for the remove all button</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">removeLabel</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the label used for the remove button</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">required</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">Boolean</td>
+ <td align="left" valign="top">If set to true, the rendered element will indicate that input is required</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">requiredposition</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Define required position of required form element (left|right)</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">rightTitle</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the right hand title</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">size</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the size of the select box</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">tabindex</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html tabindex attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">template</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">The template (other than default) to use for rendering the element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">templateDir</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">The template directory.</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">theme</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">The theme (other than default) to use for rendering the element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">title</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the html title attribute on rendered html element</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">tooltip</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the tooltip of this particular component</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">tooltipConfig</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Set the tooltip configuration</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">upLabel</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">the label used for the up button</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">value</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top"></td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Preset the value of input element.</td>
+ </tr>
+ </table>
+ <!-- END SNIPPET: tagattributes -->
+ </body>
+</html>
+
Modified: struts/struts2/trunk/core/src/site/resources/tags/optiontransferselect.html
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/site/resources/tags/optiontransferselect.html?view=diff&rev=495339&r1=495338&r2=495339
==============================================================================
--- struts/struts2/trunk/core/src/site/resources/tags/optiontransferselect.html (original)
+++ struts/struts2/trunk/core/src/site/resources/tags/optiontransferselect.html Thu Jan 11 11:20:51 2007
@@ -241,7 +241,7 @@
<td align="left" valign="top"></td>
<td align="left" valign="top">true</td>
<td align="left" valign="top">String</td>
- <td align="left" valign="top">Set the list key of the second attribute</td>
+ <td align="left" valign="top">The key expression to use for second list</td>
</tr>
<tr>
<td align="left" valign="top">doubleListValue</td>
Added: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTagTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTagTest.java?view=auto&rev=495339
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTagTest.java (added)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/InputTransferSelectTagTest.java Thu Jan 11 11:20:51 2007
@@ -0,0 +1,34 @@
+package org.apache.struts2.views.jsp.ui;
+
+import org.apache.struts2.views.jsp.AbstractUITagTest;
+import org.apache.struts2.TestAction;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ *
+ */
+public class InputTransferSelectTagTest extends AbstractUITagTest {
+
+ public void testWithRequired() throws Exception {
+ List list = new ArrayList();
+ list.add("Item One");
+ list.add("Item Two");
+
+ TestAction testaction = (TestAction) action;
+ testaction.setCollection(list);
+
+ InputTransferSelectTag tag = new InputTransferSelectTag();
+ tag.setPageContext(pageContext);
+
+ tag.setName("collection");
+ tag.setList("collection");
+
+ tag.doStartTag();
+ tag.doEndTag();
+
+ //System.out.println(writer.toString());
+ verify(InputTransferSelectTagTest.class.getResource("inputtransferselect-1.txt"));
+ }
+}