From de09c2ca535757a0b94564a3ecfb4e019d65c7a2 Mon Sep 17 00:00:00 2001
From: Musachy Barroso
Date: Sun, 4 Mar 2007 18:51:30 +0000
Subject: [PATCH] WW-1607 Separate dojo-related tags into their own plugin *
Overwrite parent attribute setters so they are added to the TLD
git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@514458 13f79535-47bb-0310-9956-ffa450edef68
---
apps/showcase/pom.xml | 6 ++
.../main/webapp/ajax/autocompleter/index.jsp | 20 ++---
.../src/main/webapp/ajax/commonInclude.jsp | 2 +-
.../main/webapp/ajax/remotebutton/index.jsp | 12 +--
.../components/AbstractRemoteCallUIBean.java | 20 +++++
.../org/apache/struts2/components/Anchor.java | 48 +----------
.../struts2/components/Autocompleter.java | 70 ++++++----------
.../struts2/components/DateTimePicker.java | 5 ++
.../org/apache/struts2/components/Div.java | 49 +----------
.../struts2/components/RemoteUICallBean.java | 7 +-
.../org/apache/struts2/components/Submit.java | 84 ++++++++-----------
.../org/apache/struts2/components/Tree.java | 20 +++++
.../apache/struts2/components/TreeNode.java | 20 +++++
.../struts2/views/jsp/ui/AnchorTest.java | 1 +
.../views/jsp/ui/AutocompleterTest.java | 2 +
.../views/jsp/ui/DateTimePickerTagTest.java | 4 +
.../apache/struts2/views/jsp/ui/DivTest.java | 2 +
.../struts2/views/jsp/ui/SubmitAjaxTest.java | 3 +
.../apache/struts2/views/jsp/ui/TreeTest.java | 3 +
19 files changed, 173 insertions(+), 205 deletions(-)
diff --git a/apps/showcase/pom.xml b/apps/showcase/pom.xml
index c994d62bb..5cbb9b61d 100644
--- a/apps/showcase/pom.xml
+++ b/apps/showcase/pom.xml
@@ -37,6 +37,12 @@
struts2-struts1-plugin${pom.version}
+
+
+ org.apache.struts
+ struts2-dojo-plugin
+ ${pom.version}
+ org.apache.struts
diff --git a/apps/showcase/src/main/webapp/ajax/autocompleter/index.jsp b/apps/showcase/src/main/webapp/ajax/autocompleter/index.jsp
index c7303fe6f..8c87b7bfd 100644
--- a/apps/showcase/src/main/webapp/ajax/autocompleter/index.jsp
+++ b/apps/showcase/src/main/webapp/ajax/autocompleter/index.jsp
@@ -1,5 +1,5 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
Ajax Examples
@@ -16,7 +16,7 @@
Using a JSON list returned from an action (href="/JSONList.action"), without autoComplete (autoComplete="false"), use indicator, search substring (searchType="substring")
-
+
@@ -24,7 +24,7 @@ Using a JSON list returned from an action (href="/JSONList.action"), without aut
Reload on type (loadOnTextChange="true"), after 3 characters (loadMinimumCout="3", it is "3" by default), without the down arrow button (showDownArrow="false")
-
+
@@ -32,35 +32,35 @@ Reload on type (loadOnTextChange="true"), after 3 characters (loadMinimumCout="3
Using a JSON list returned from an action (href="/JSONList.action"), with autoComplete (autoComplete="true")
-
+
Using a local list (list="{'apple','banana','grape','pear'}")
-
+
Force valid options (forceValidOption="true")
-
+
Make dropdown's height to 180px (dropdownHeight="180")
-
+
Disabled combobox (disabled="true")
-
+
@@ -71,9 +71,9 @@ Disabled combobox (disabled="true")
Link two autocompleter elements. When the selected value in 'Autocompleter 1' changes, the available values in 'Autocompleter 2' will change also.
-Autocompleter 2
+Autocompleter 2
@@ -54,7 +54,7 @@ Use an image as submit
Use a button as submit (custom text)
-
+
diff --git a/plugins/dojo/src/main/java/org/apache/struts2/components/AbstractRemoteCallUIBean.java b/plugins/dojo/src/main/java/org/apache/struts2/components/AbstractRemoteCallUIBean.java
index 4cf5313c1..6a5ae4ca7 100644
--- a/plugins/dojo/src/main/java/org/apache/struts2/components/AbstractRemoteCallUIBean.java
+++ b/plugins/dojo/src/main/java/org/apache/struts2/components/AbstractRemoteCallUIBean.java
@@ -168,4 +168,24 @@ public abstract class AbstractRemoteCallUIBean extends ClosingUIBean implements
public void setShowLoadingText(String showLoadingText) {
this.showLoadingText = showLoadingText;
}
+
+ @StrutsTagAttribute(description="The css class to use for element")
+ public void setCssClass(String cssClass) {
+ super.setCssClass(cssClass);
+ }
+
+ @StrutsTagAttribute(description="The css style to use for element")
+ public void setCssStyle(String cssStyle) {
+ super.setCssStyle(cssStyle);
+ }
+
+ @StrutsTagAttribute(description="The id to use for the element")
+ public void setId(String id) {
+ super.setId(id);
+ }
+
+ @StrutsTagAttribute(description="The name to set for element")
+ public void setName(String name) {
+ super.setName(name);
+ }
}
diff --git a/plugins/dojo/src/main/java/org/apache/struts2/components/Anchor.java b/plugins/dojo/src/main/java/org/apache/struts2/components/Anchor.java
index 0354114b3..51e11e6a2 100644
--- a/plugins/dojo/src/main/java/org/apache/struts2/components/Anchor.java
+++ b/plugins/dojo/src/main/java/org/apache/struts2/components/Anchor.java
@@ -33,53 +33,7 @@ import com.opensymphony.xwork2.util.ValueStack;
*
* A tag that creates a HTML <a href='' /> that when clicked calls a URL remote XMLHttpRequest call via the dojo
* framework.
- *
- *
- * THE FOLLOWING IS ONLY VALID WHEN AJAX IS CONFIGURED
- *
- *
href
- *
errorText
- *
listenTopics
- *
notifyTopics
- *
executeScripts
- *
loadingText
- *
listenTopics
- *
handler
- *
formId
- *
formFilter
- *
targets
- *
showErrorTransportText
- *
targets
- *
indicator
- *
- * 'resultDivId' Deprecated. Use targets.
- * 'targets' is a list of element ids whose content will be updated with the
- * text returned from request.
- * 'errorText' is the text that will be displayed when there is an error making the request.
- * 'onLoadJS' Deprecated. Use 'notifyTopics'.
- * 'preInvokeJS' Deprecated. Use 'notifyTopics'.
- * 'executeScripts' if set to true will execute javascript sections in the returned text.
- * 'loadingText' is the text that will be displayed on the 'targets' elements while making the
- * request.
- * 'handler' is the name of the function that will take care of making the AJAX request. Dojo's widget
- * and dom node are passed as parameters).
- * 'formId' is the id of the html form whose fields will be seralized and passed as parameters
- * in the request.
- * 'formFilter' is the name of a function which will be used to filter the fields that will be
- * seralized. This function takes as a parameter the element and returns true if the element
- * should be included.
- * 'listenTopics' comma separated list of topics names, that will trigger a request
- * 'indicator' element to be shown while the request executing
- * 'showErrorTransportText': whether errors should be displayed (on 'targets')
- * 'showLoadingText' show loading text on targets
- * 'notifyTopics' comma separated list of topics names, that will be published. Three parameters are passed:
- *
- *
data: html or json object when type='load' or type='error'
- *
type: 'before' before the request is made, 'load' when the request succeeds, or 'error' when it fails
- *
request: request javascript object, when type='load' or type='error'
The autocomplete tag is a combobox that can autocomplete text entered on the input box.
* When used on the "simple" theme, the autocompleter can be used like the ComboBox.
* When used on the "ajax" theme, the list can be retieved from an action.
- *
- *
- * THE FOLLOWING IS ONLY VALID WHEN AJAX IS CONFIGURED
- *
- *
href
- *
errorText
- *
listenTopics
- *
notifyTopics
- *
listenTopics
- *
formId
- *
formFilter
- *
indicator
- *
loadOnTextChange
- *
loadMinimumCount
- *
showDownArrow
- *
searchType
- *
- * 'dropdownWidth' width in pixels of the drodpdown, same as autocompleter's width by default
- * 'dropdownHeight' height in pixels of the drodown, 120 px by default
- * 'forceValidOption' if invalid option is selected, clear autocompleter's text when focus is lost
- * 'autoComplete', if true, make suggestions on the textbox
- * 'formId' is the id of the html form whose fields will be seralized and passed as parameters
- * in the request.
- * 'formFilter' is the name of a function which will be used to filter the fields that will be
- * seralized. This function takes as a parameter the element and returns true if the element
- * should be included.
- * 'listenTopics' comma separated list of topics names, that will trigger a request
- * 'indicator' element to be shown while the request executing
- * 'showErrorTransportText': whether errors should be displayed (on 'targets')
- * 'loadOnTextChange' options will be reloaded everytime a character is typed on the textbox
- * 'loadMinimumCount' minimum number of characters that will force the content to be loaded
- * 'showDownError' show or hide the down arrow button
- * 'searchType' how the search must be performed, options are: "startstring", "startword" and "substring"
- * 'keyName' name of the field to which the selected key will be assigned
- * 'iconPath' path of icon used for the dropdown
- * 'templateCssPath' path to css file used to customize Dojo's widget
- * 'dataFieldName' name of the field to be used as the list in the returned JSON string
- * 'notifyTopics' comma separated list of topics names, that will be published. Three parameters are passed:
- *
- *
data: selected value when type='valuechanged'
- *
type: 'before' before the request is made, 'valuechanged' when selection changes, 'load' when the request succeeds, or 'error' when it fails
- *
request: request javascript object, when type='load' or type='error'
- *
- *
+ *
*
*
*
Autocompleter that gets its list from an action:
@@ -299,4 +256,29 @@ public class Autocompleter extends ComboBox {
public void setDataFieldName(String dataFieldName) {
this.dataFieldName = dataFieldName;
}
+
+ @StrutsTagAttribute(description="The css class to use for element")
+ public void setCssClass(String cssClass) {
+ super.setCssClass(cssClass);
+ }
+
+ @StrutsTagAttribute(description="The css style to use for element")
+ public void setCssStyle(String cssStyle) {
+ super.setCssStyle(cssStyle);
+ }
+
+ @StrutsTagAttribute(description="The id to use for the element")
+ public void setId(String id) {
+ super.setId(id);
+ }
+
+ @StrutsTagAttribute(description="The name to set for element")
+ public void setName(String name) {
+ super.setName(name);
+ }
+
+ @StrutsTagAttribute(description="Preset the value of input element")
+ public void setValue(String arg0) {
+ super.setValue(arg0);
+ }
}
diff --git a/plugins/dojo/src/main/java/org/apache/struts2/components/DateTimePicker.java b/plugins/dojo/src/main/java/org/apache/struts2/components/DateTimePicker.java
index ab7b01915..f1e08fe8f 100644
--- a/plugins/dojo/src/main/java/org/apache/struts2/components/DateTimePicker.java
+++ b/plugins/dojo/src/main/java/org/apache/struts2/components/DateTimePicker.java
@@ -291,6 +291,11 @@ public class DateTimePicker extends UIBean {
this.templateCssPath = templateCssPath;
}
+ @StrutsTagAttribute(description="Preset the value of input element")
+ public void setValue(String arg0) {
+ super.setValue(arg0);
+ }
+
private String format(Object obj) {
if(obj == null)
return null;
diff --git a/plugins/dojo/src/main/java/org/apache/struts2/components/Div.java b/plugins/dojo/src/main/java/org/apache/struts2/components/Div.java
index dca049b38..f6ac44ee7 100644
--- a/plugins/dojo/src/main/java/org/apache/struts2/components/Div.java
+++ b/plugins/dojo/src/main/java/org/apache/struts2/components/Div.java
@@ -37,54 +37,7 @@ import com.opensymphony.xwork2.util.ValueStack;
* the dojo framework.
*
*
- *
- * THE FOLLOWING IS ONLY VALID WHEN AJAX IS CONFIGURED
- *
- *
href
- *
errorText
- *
afterLoading
- *
executeScripts
- *
loadingText
- *
listenTopics
- *
handler
- *
formId
- *
formFilter
- *
targets
- *
notifyTopics
- *
showErrorTransportText
- *
indicator
- *
- * 'targets' is a list of element ids whose content will be updated with the
- * text returned from request.
- * 'href' needs to be set as an url tag reference value.
- * 'errorText' is the text that will be displayed when there is an error making the request.
- * 'afterLoading' Deprecated. Use 'notifyTopics'.
- * 'executeScripts' if set to true will execute javascript sections in the returned text.
- * 'loadingText' is the text that will be displayed on the 'targets' elements while making the
- * request.
- * 'handler' is the name of the function that will take care of making the AJAX request. Dojo's widget
- * and dom node are passed as parameters).
- * 'formId' is the id of the html form whose fields will be seralized and passed as parameters
- * in the request.
- * 'formFilter' is the name of a function which will be used to filter the fields that will be
- * seralized. This function takes as a parameter the element and returns true if the element
- * should be included.
- * 'updateFreq' sets(in milliseconds) the update interval.
- * 'autoStart' if set to true(true by default) starts the timer automatically
- * 'startTimerListenTopics' is a comma-separated list of topics used to start the timer
- * 'stopTimerListenTopics' is a comma-separated list of topics used to stop the timer
- * 'listenTopics' comma separated list of topics names, that will trigger a request
- * 'indicator' element to be shown while the request executing
- * 'showErrorTransportText': whether errors should be displayed (on 'targets')
- * 'showLoadingText' show loading text on targets
- * 'separateScript' Run scripts in a separate scope, unique for each Div
- * 'notifyTopics' comma separated list of topics names, that will be published. Three parameters are passed:
- *
- *
data: html or json object when type='load' or type='error'
- *
type: 'before' before the request is made, 'load' when the request succeeds, or 'error' when it fails
- *
request: request javascript object, when type='load' or type='error'
*
- *
- * THE FOLLOWING IS ONLY VALID WHEN AJAX IS CONFIGURED
- *
- *
href
- *
errorText
- *
listenTopics
- *
notifyTopics
- *
executeScripts
- *
loadingText
- *
listenTopics
- *
handler
- *
formId
- *
formFilter
- *
targets
- *
showErrorTransportText
- *
targets
- *
indicator
- *
- * 'resultDivId' Deprecated. Use targets.
- * 'targets' is a list of element ids whose content will be updated with the
- * text returned from request.
- * 'errorText' is the text that will be displayed when there is an error making the request.
- * 'onLoadJS' Deprecated. Use 'notifyTopics'.
- * 'preInvokeJS' Deprecated. Use 'notifyTopics'.
- * 'executeScripts' if set to true will execute javascript sections in the returned text.
- * 'loadingText' is the text that will be displayed on the 'targets' elements while making the
- * request.
- * 'handler' is the name of the function that will take care of making the AJAX request. Dojo's widget
- * and dom node are passed as parameters).
- * 'formId' is the id of the html form whose fields will be seralized and passed as parameters
- * in the request.
- * 'formFilter' is the name of a function which will be used to filter the fields that will be
- * seralized. This function takes as a parameter the element and returns true if the element
- * should be included.
- * 'listenTopics' comma separated list of topics names, that will trigger a request
- * 'indicator' element to be shown while the request executing
- * 'showErrorTransportText': whether errors should be displayed (on 'targets')
- * 'showLoadingText' show loading text on targets
- * 'notifyTopics' comma separated list of topics names, that will be published. Three parameters are passed:
- *
- *
data: html or json object when type='load' or type='error'
- *
type: 'before' before the request is made, 'load' when the request succeeds, or 'error' when it fails
- *
request: request javascript object, when type='load' or type='error'
- *
- *
- *
*
* Show the results in another div. If you want your results to be shown in
* a div, use the resultDivId where the id is the id of the div you want them
@@ -315,7 +269,6 @@ public class Submit extends FormButton implements RemoteUICallBean {
this.targets = targets;
}
-
@StrutsTagAttribute(description="Topics that will published when the remote call completes")
public void setNotifyTopics(String notifyTopics) {
this.notifyTopics = notifyTopics;
@@ -327,7 +280,6 @@ public class Submit extends FormButton implements RemoteUICallBean {
this.showErrorTransportText = showErrorTransportText;
}
-
@StrutsTagAttribute(description="Set indicator")
public void setIndicator(String indicator) {
this.indicator = indicator;
@@ -337,4 +289,40 @@ public class Submit extends FormButton implements RemoteUICallBean {
public void setShowLoadingText(String showLoadingText) {
this.showLoadingText = showLoadingText;
}
+
+ @StrutsTagAttribute(description="The css class to use for element")
+ public void setCssClass(String cssClass) {
+ super.setCssClass(cssClass);
+ }
+
+ @StrutsTagAttribute(description="The css style to use for element")
+ public void setCssStyle(String cssStyle) {
+ super.setCssStyle(cssStyle);
+ }
+
+ @StrutsTagAttribute(description="The id to use for the element")
+ public void setId(String id) {
+ super.setId(id);
+ }
+
+ @StrutsTagAttribute(description="The name to set for element")
+ public void setName(String name) {
+ super.setName(name);
+ }
+
+ @StrutsTagAttribute(description="The type of submit to use. Valid values are input, " +
+ "button and image.", defaultValue="input")
+ public void setType(String type) {
+ super.setType(type);
+ }
+
+ @StrutsTagAttribute(description="Preset the value of input element.")
+ public void setValue(String value) {
+ super.setValue(value);
+ }
+
+ @StrutsTagAttribute(description="Label expression used for rendering a element specific label")
+ public void setLabel(String label) {
+ super.setLabel(label);
+ }
}
diff --git a/plugins/dojo/src/main/java/org/apache/struts2/components/Tree.java b/plugins/dojo/src/main/java/org/apache/struts2/components/Tree.java
index ce0fb429b..29ddfc378 100644
--- a/plugins/dojo/src/main/java/org/apache/struts2/components/Tree.java
+++ b/plugins/dojo/src/main/java/org/apache/struts2/components/Tree.java
@@ -431,5 +431,25 @@ public class Tree extends ClosingUIBean {
public void setShowGrid(String showGrid) {
this.showGrid = showGrid;
}
+
+ @StrutsTagAttribute(description="The css class to use for element")
+ public void setCssClass(String cssClass) {
+ super.setCssClass(cssClass);
+ }
+
+ @StrutsTagAttribute(description="The css style to use for element")
+ public void setCssStyle(String cssStyle) {
+ super.setCssStyle(cssStyle);
+ }
+
+ @StrutsTagAttribute(description="The id to use for the element")
+ public void setId(String id) {
+ super.setId(id);
+ }
+
+ @StrutsTagAttribute(description="The name to set for element")
+ public void setName(String name) {
+ super.setName(name);
+ }
}
diff --git a/plugins/dojo/src/main/java/org/apache/struts2/components/TreeNode.java b/plugins/dojo/src/main/java/org/apache/struts2/components/TreeNode.java
index 4df8bbed2..077f727ee 100644
--- a/plugins/dojo/src/main/java/org/apache/struts2/components/TreeNode.java
+++ b/plugins/dojo/src/main/java/org/apache/struts2/components/TreeNode.java
@@ -102,4 +102,24 @@ public class TreeNode extends ClosingUIBean {
public void setLabel(String label) {
super.setLabel(label);
}
+
+ @StrutsTagAttribute(description="The css class to use for element")
+ public void setCssClass(String cssClass) {
+ super.setCssClass(cssClass);
+ }
+
+ @StrutsTagAttribute(description="The css style to use for element")
+ public void setCssStyle(String cssStyle) {
+ super.setCssStyle(cssStyle);
+ }
+
+ @StrutsTagAttribute(description="The id to use for the element")
+ public void setId(String id) {
+ super.setId(id);
+ }
+
+ @StrutsTagAttribute(description="The name to set for element")
+ public void setName(String name) {
+ super.setName(name);
+ }
}
diff --git a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java
index 097ad6893..e7fa595e1 100644
--- a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java
+++ b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java
@@ -21,6 +21,7 @@
package org.apache.struts2.views.jsp.ui;
import org.apache.struts2.TestAction;
+import org.apache.struts2.views.jsp.ui.dojo.AnchorTag;
/**
diff --git a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/AutocompleterTest.java b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/AutocompleterTest.java
index ec4cd89a6..0b0c17c62 100644
--- a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/AutocompleterTest.java
+++ b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/AutocompleterTest.java
@@ -20,6 +20,8 @@
*/
package org.apache.struts2.views.jsp.ui;
+import org.apache.struts2.views.jsp.ui.dojo.AutocompleterTag;
+
/**
* @see org.apache.struts2.components.Autocompleter
diff --git a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/DateTimePickerTagTest.java b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/DateTimePickerTagTest.java
index f86a2ed7b..2de5ff150 100644
--- a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/DateTimePickerTagTest.java
+++ b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/DateTimePickerTagTest.java
@@ -20,6 +20,10 @@
*/
package org.apache.struts2.views.jsp.ui;
+import org.apache.struts2.views.jsp.ui.dojo.AbstractRemoteCallUITag;
+import org.apache.struts2.views.jsp.ui.dojo.DateTimePickerTag;
+import org.apache.struts2.views.jsp.ui.dojo.DivTag;
+
/**
diff --git a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/DivTest.java b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/DivTest.java
index 98b754d99..cb3907c1a 100644
--- a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/DivTest.java
+++ b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/DivTest.java
@@ -21,6 +21,8 @@
package org.apache.struts2.views.jsp.ui;
import org.apache.struts2.TestAction;
+import org.apache.struts2.views.jsp.ui.dojo.AbstractRemoteCallUITag;
+import org.apache.struts2.views.jsp.ui.dojo.DivTag;
/**
diff --git a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java
index e4f3a2906..649595c1e 100644
--- a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java
+++ b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java
@@ -18,6 +18,9 @@
package org.apache.struts2.views.jsp.ui;
import org.apache.struts2.TestAction;
+import org.apache.struts2.views.jsp.ui.dojo.AbstractRemoteCallUITag;
+import org.apache.struts2.views.jsp.ui.dojo.DivTag;
+import org.apache.struts2.views.jsp.ui.dojo.SubmitTag;
/**
* Test Submit component in "ajax" theme.
diff --git a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/TreeTest.java b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/TreeTest.java
index 2ac342f83..611f29da2 100644
--- a/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/TreeTest.java
+++ b/plugins/dojo/src/test/java/org/apache/struts2/views/jsp/ui/TreeTest.java
@@ -21,6 +21,9 @@
package org.apache.struts2.views.jsp.ui;
+import org.apache.struts2.views.jsp.ui.dojo.TreeNodeTag;
+import org.apache.struts2.views.jsp.ui.dojo.TreeTag;
+
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;