From 3795f76baa474af8f1e07344102ce21a5a2e58e7 Mon Sep 17 00:00:00 2001 From: "Donald J. Brown" Date: Sun, 3 Sep 2006 08:05:51 +0000 Subject: [PATCH] Reverting bad commit that didn't properly merge changes with updated code...what better way to spend a Saturday night... git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@439739 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/struts2/ServletActionContext.java | 8 +- .../org/apache/struts2/StrutsConstants.java | 4 +- .../org/apache/struts2/StrutsException.java | 3 - .../struts2/components/ActionComponent.java | 47 +- .../struts2/components/ActionError.java | 18 +- .../struts2/components/ActionMessage.java | 12 +- .../org/apache/struts2/components/Anchor.java | 22 +- .../struts2/components/AppendIterator.java | 22 +- .../org/apache/struts2/components/Bean.java | 35 +- .../apache/struts2/components/Checkbox.java | 10 +- .../struts2/components/CheckboxList.java | 10 +- .../struts2/components/ClosingUIBean.java | 12 +- .../apache/struts2/components/ComboBox.java | 36 +- .../apache/struts2/components/Component.java | 54 +- .../org/apache/struts2/components/Date.java | 29 +- .../apache/struts2/components/DatePicker.java | 22 +- .../org/apache/struts2/components/Div.java | 18 +- .../struts2/components/DoubleListUIBean.java | 76 +- .../struts2/components/DoubleSelect.java | 10 +- .../org/apache/struts2/components/Else.java | 19 +- .../org/apache/struts2/components/ElseIf.java | 29 +- .../apache/struts2/components/FieldError.java | 38 +- .../org/apache/struts2/components/File.java | 18 +- .../org/apache/struts2/components/Form.java | 124 +- .../apache/struts2/components/FormButton.java | 74 +- .../struts2/components/GenericUIBean.java | 43 +- .../org/apache/struts2/components/Head.java | 21 +- .../org/apache/struts2/components/Hidden.java | 10 +- .../org/apache/struts2/components/I18n.java | 31 +- .../org/apache/struts2/components/If.java | 23 +- .../apache/struts2/components/Include.java | 56 +- .../struts2/components/IteratorComponent.java | 89 +- .../org/apache/struts2/components/Label.java | 10 +- .../apache/struts2/components/ListUIBean.java | 20 +- .../struts2/components/MergeIterator.java | 22 +- .../apache/struts2/components/OptGroup.java | 20 +- .../components/OptionTransferSelect.java | 34 +- .../org/apache/struts2/components/Panel.java | 13 +- .../org/apache/struts2/components/Param.java | 16 +- .../apache/struts2/components/Password.java | 12 +- .../apache/struts2/components/Property.java | 26 +- .../org/apache/struts2/components/Push.java | 46 +- .../org/apache/struts2/components/Radio.java | 12 +- .../struts2/components/RemoteCallUIBean.java | 14 +- .../org/apache/struts2/components/Reset.java | 12 +- .../org/apache/struts2/components/Select.java | 20 +- .../org/apache/struts2/components/Set.java | 16 +- .../org/apache/struts2/components/Submit.java | 68 +- .../struts2/components/TabbedPanel.java | 51 +- .../org/apache/struts2/components/Text.java | 29 +- .../apache/struts2/components/TextArea.java | 16 +- .../apache/struts2/components/TextField.java | 16 +- .../apache/struts2/components/TimePicker.java | 10 +- .../org/apache/struts2/components/Token.java | 14 +- .../org/apache/struts2/components/Tree.java | 71 +- .../apache/struts2/components/TreeNode.java | 26 +- .../org/apache/struts2/components/UIBean.java | 156 +- .../org/apache/struts2/components/URL.java | 132 +- .../struts2/components/UpDownSelect.java | 20 +- .../components/table/AbstractFilterModel.java | 3 +- .../components/table/SortFilterModel.java | 9 +- .../struts2/components/table/WebTable.java | 32 +- .../table/renderer/DateCellRenderer.java | 4 +- .../table/renderer/NumericCellRenderer.java | 4 +- .../template/BaseTemplateEngine.java | 9 +- .../template/FreemarkerTemplateEngine.java | 31 +- .../template/JspTemplateEngine.java | 16 +- .../template/TemplateEngineManager.java | 4 +- .../template/TemplateRenderingContext.java | 7 +- .../template/VelocityTemplateEngine.java | 21 +- .../struts2/config/DefaultSettings.java | 11 +- .../org/apache/struts2/config/Settings.java | 11 +- .../config_browser/ActionNamesAction.java | 11 +- .../config_browser/ConfigurationHelper.java | 4 +- .../config_browser/ListValidatorsAction.java | 11 +- .../config_browser/ShowConfigAction.java | 12 +- .../config_browser/ShowValidatorAction.java | 18 +- .../dispatcher/ActionContextCleanUp.java | 18 +- .../struts2/dispatcher/ApplicationMap.java | 9 +- .../dispatcher/DefaultActionSupport.java | 1 - .../apache/struts2/dispatcher/Dispatcher.java | 54 +- .../struts2/dispatcher/FilterDispatcher.java | 19 +- .../FilterDispatcherCompatWeblogic61.java | 8 +- .../struts2/dispatcher/HttpHeaderResult.java | 12 +- .../apache/struts2/dispatcher/RequestMap.java | 3 +- .../ServletActionRedirectResult.java | 2 +- .../dispatcher/ServletDispatcherResult.java | 11 +- .../dispatcher/ServletRedirectResult.java | 11 +- .../apache/struts2/dispatcher/SessionMap.java | 11 +- .../struts2/dispatcher/StreamResult.java | 29 +- .../dispatcher/StrutsRequestWrapper.java | 6 +- .../dispatcher/StrutsResultSupport.java | 1 - .../struts2/dispatcher/VelocityResult.java | 32 +- .../mapper/ActionMapperFactory.java | 10 +- .../dispatcher/mapper/ActionMapping.java | 4 +- .../mapper/DefaultActionMapper.java | 63 +- .../mapper/RestfulActionMapper.java | 16 +- .../multipart/JakartaMultiPartRequest.java | 22 +- .../multipart/MultiPartRequestWrapper.java | 25 +- .../struts2/impl/ActionContextImpl.java | 9 +- .../struts2/impl/InterceptorAdapter.java | 6 +- .../org/apache/struts2/impl/MessagesImpl.java | 14 +- .../struts2/impl/RequestContextImpl.java | 27 +- .../apache/struts2/impl/ResultAdapter.java | 3 +- .../struts2/impl/StrutsActionProxy.java | 10 +- .../impl/StrutsActionProxyFactory.java | 4 +- .../struts2/impl/StrutsObjectFactory.java | 10 +- .../struts2/impl/ValueStackAdapter.java | 5 +- .../interceptor/BackgroundProcess.java | 4 +- .../interceptor/CreateSessionInterceptor.java | 4 +- .../ExecuteAndWaitInterceptor.java | 2 +- .../struts2/interceptor/PrincipalProxy.java | 3 +- .../struts2/interceptor/ScopeInterceptor.java | 17 +- .../interceptor/ServletConfigInterceptor.java | 9 +- .../struts2/interceptor/TokenInterceptor.java | 1 - .../TokenSessionStoreInterceptor.java | 8 +- .../debugging/DebuggingInterceptor.java | 31 +- .../apache/struts2/jsf/FacesInterceptor.java | 4 + .../struts2/jsf/StrutsNavigationHandler.java | 1 + .../apache/struts2/plexus/PlexusFilter.java | 19 +- .../plexus/PlexusLifecycleListener.java | 11 +- .../struts2/plexus/PlexusObjectFactory.java | 18 +- .../apache/struts2/plexus/PlexusUtils.java | 12 +- .../portlet/PortletApplicationMap.java | 4 +- .../portlet/context/PortletActionContext.java | 1 - .../portlet/context/PreparatorServlet.java | 2 +- .../portlet/dispatcher/Jsr168Dispatcher.java | 1 + .../struts2/portlet/result/PortletResult.java | 2 +- .../portlet/result/PortletVelocityResult.java | 40 +- .../portlet/util/PortletUrlHelper.java | 21 +- .../struts2/quickstart/Configuration.java | 24 +- .../struts2/quickstart/JettyServer.java | 8 +- .../quickstart/MultiDirClassLoader.java | 6 +- .../struts2/quickstart/MultiDirResource.java | 19 +- .../MultiWebApplicationContext.java | 20 +- .../apache/struts2/quickstart/QuickStart.java | 24 +- .../apache/struts2/sitegraph/SiteGraph.java | 12 +- .../sitegraph/StrutsConfigRetriever.java | 26 +- .../sitegraph/entities/FileBasedView.java | 11 +- .../sitegraph/entities/FreeMarkerView.java | 4 +- .../apache/struts2/sitegraph/model/Graph.java | 6 +- .../sitegraph/renderers/DOTRenderer.java | 25 +- .../sitemesh/FreeMarkerPageFilter.java | 29 +- .../struts2/sitemesh/TemplatePageFilter.java | 29 +- .../struts2/sitemesh/VelocityPageFilter.java | 24 +- .../spring/StrutsSpringObjectFactory.java | 11 +- ...xternalReferenceResolverSetupListener.java | 25 +- .../struts2/util/AppendIteratorFilter.java | 4 +- .../org/apache/struts2/util/AttributeMap.java | 7 +- .../struts2/util/InvocationSessionStore.java | 8 +- .../struts2/util/IteratorGenerator.java | 4 +- .../org/apache/struts2/util/MakeIterator.java | 8 +- .../struts2/util/MergeIteratorFilter.java | 4 +- .../ResolverSetupServletContextListener.java | 10 +- .../struts2/util/SortIteratorFilter.java | 9 +- .../java/org/apache/struts2/util/Sorter.java | 4 +- .../struts2/util/StrutsTypeConverter.java | 4 +- .../org/apache/struts2/util/StrutsUtil.java | 34 +- .../struts2/util/SubsetIteratorFilter.java | 8 +- .../org/apache/struts2/util/TokenHelper.java | 9 +- .../java/org/apache/struts2/util/URLBean.java | 7 +- .../struts2/util/VelocityStrutsUtil.java | 12 +- .../classloader/CompilingClassLoader.java | 5 +- .../classloader/ReloadingClassLoader.java | 18 +- .../eclipse/EclipseJavaCompiler.java | 29 +- .../eclipse/EclipseJavaCompilerSettings.java | 6 +- .../listeners/CompilingListener.java | 16 +- .../listeners/ReloadingListener.java | 12 +- .../monitor/FilesystemAlterationMonitor.java | 15 +- .../readers/FileResourceReader.java | 4 +- .../classloader/stores/FileResourceStore.java | 10 +- .../stores/MemoryResourceStore.java | 6 +- .../struts2/validators/DWRValidator.java | 45 +- .../views/freemarker/FreemarkerManager.java | 44 +- .../views/freemarker/FreemarkerResult.java | 28 +- .../freemarker/PortletFreemarkerResult.java | 8 +- .../views/freemarker/ScopesHashModel.java | 10 +- .../views/freemarker/StrutsBeanWrapper.java | 14 +- .../freemarker/StrutsClassTemplateLoader.java | 5 +- .../freemarker/tags/ActionErrorModel.java | 9 +- .../freemarker/tags/ActionMessageModel.java | 9 +- .../views/freemarker/tags/ActionModel.java | 7 +- .../views/freemarker/tags/AnchorModel.java | 9 +- .../views/freemarker/tags/BeanModel.java | 7 +- .../views/freemarker/tags/CallbackWriter.java | 9 +- .../freemarker/tags/CheckboxListModel.java | 7 +- .../views/freemarker/tags/CheckboxModel.java | 7 +- .../views/freemarker/tags/ComboBoxModel.java | 7 +- .../views/freemarker/tags/ComponentModel.java | 7 +- .../views/freemarker/tags/DateModel.java | 7 +- .../freemarker/tags/DatePickerModel.java | 7 +- .../views/freemarker/tags/DivModel.java | 7 +- .../freemarker/tags/DoubleSelectModel.java | 7 +- .../freemarker/tags/FieldErrorModel.java | 7 +- .../views/freemarker/tags/FileModel.java | 7 +- .../views/freemarker/tags/FormModel.java | 7 +- .../views/freemarker/tags/HeadModel.java | 7 +- .../views/freemarker/tags/HiddenModel.java | 7 +- .../views/freemarker/tags/I18nModel.java | 7 +- .../views/freemarker/tags/IncludeModel.java | 7 +- .../views/freemarker/tags/IteratorModel.java | 7 +- .../views/freemarker/tags/LabelModel.java | 7 +- .../views/freemarker/tags/OptGroupModel.java | 1 - .../tags/OptionTransferSelectModel.java | 1 - .../views/freemarker/tags/PanelModel.java | 7 +- .../views/freemarker/tags/ParamModel.java | 7 +- .../views/freemarker/tags/PasswordModel.java | 7 +- .../views/freemarker/tags/PropertyModel.java | 7 +- .../views/freemarker/tags/PushModel.java | 7 +- .../views/freemarker/tags/RadioModel.java | 7 +- .../views/freemarker/tags/ResetModel.java | 7 +- .../views/freemarker/tags/SelectModel.java | 7 +- .../views/freemarker/tags/SetModel.java | 7 +- .../views/freemarker/tags/StrutsModels.java | 6 +- .../views/freemarker/tags/SubmitModel.java | 7 +- .../freemarker/tags/TabbedPanelModel.java | 7 +- .../views/freemarker/tags/TagModel.java | 20 +- .../views/freemarker/tags/TextAreaModel.java | 7 +- .../views/freemarker/tags/TextFieldModel.java | 7 +- .../views/freemarker/tags/TextModel.java | 7 +- .../views/freemarker/tags/TokenModel.java | 7 +- .../views/freemarker/tags/TreeModel.java | 7 +- .../views/freemarker/tags/TreeNodeModel.java | 7 +- .../views/freemarker/tags/URLModel.java | 7 +- .../freemarker/tags/UpDownSelectModel.java | 1 - .../views/freemarker/tags/WebTableModel.java | 7 +- .../apache/struts2/views/jsp/ActionTag.java | 7 +- .../org/apache/struts2/views/jsp/BeanTag.java | 11 +- .../views/jsp/ComponentTagSupport.java | 7 +- .../org/apache/struts2/views/jsp/DateTag.java | 1 - .../apache/struts2/views/jsp/ElseIfTag.java | 7 +- .../org/apache/struts2/views/jsp/ElseTag.java | 7 +- .../org/apache/struts2/views/jsp/I18nTag.java | 7 +- .../org/apache/struts2/views/jsp/IfTag.java | 7 +- .../apache/struts2/views/jsp/IncludeTag.java | 7 +- .../apache/struts2/views/jsp/IteratorTag.java | 9 +- .../apache/struts2/views/jsp/ParamTag.java | 7 +- .../apache/struts2/views/jsp/PropertyTag.java | 7 +- .../org/apache/struts2/views/jsp/PushTag.java | 7 +- .../org/apache/struts2/views/jsp/SetTag.java | 7 +- .../views/jsp/StrutsBodyTagSupport.java | 10 +- .../apache/struts2/views/jsp/TagUtils.java | 12 +- .../org/apache/struts2/views/jsp/TextTag.java | 7 +- .../org/apache/struts2/views/jsp/URLTag.java | 7 +- .../views/jsp/iterator/AppendIteratorTag.java | 7 +- .../jsp/iterator/IteratorGeneratorTag.java | 51 +- .../views/jsp/iterator/MergeIteratorTag.java | 7 +- .../views/jsp/iterator/SortIteratorTag.java | 26 +- .../struts2/views/jsp/ui/ActionErrorTag.java | 1 - .../views/jsp/ui/ActionMessageTag.java | 1 - .../struts2/views/jsp/ui/AnchorTag.java | 9 +- .../struts2/views/jsp/ui/CheckboxListTag.java | 7 +- .../struts2/views/jsp/ui/CheckboxTag.java | 7 +- .../struts2/views/jsp/ui/ComboBoxTag.java | 7 +- .../struts2/views/jsp/ui/ComponentTag.java | 7 +- .../struts2/views/jsp/ui/DatePickerTag.java | 9 +- .../apache/struts2/views/jsp/ui/DivTag.java | 7 +- .../struts2/views/jsp/ui/DoubleSelectTag.java | 7 +- .../struts2/views/jsp/ui/FieldErrorTag.java | 1 - .../apache/struts2/views/jsp/ui/FileTag.java | 7 +- .../apache/struts2/views/jsp/ui/FormTag.java | 1 - .../apache/struts2/views/jsp/ui/HeadTag.java | 7 +- .../struts2/views/jsp/ui/HiddenTag.java | 7 +- .../apache/struts2/views/jsp/ui/LabelTag.java | 7 +- .../apache/struts2/views/jsp/ui/OgnlTool.java | 3 +- .../struts2/views/jsp/ui/OptGroupTag.java | 13 +- .../views/jsp/ui/OptionTransferSelectTag.java | 1 - .../apache/struts2/views/jsp/ui/PanelTag.java | 7 +- .../struts2/views/jsp/ui/PasswordTag.java | 7 +- .../apache/struts2/views/jsp/ui/RadioTag.java | 7 +- .../apache/struts2/views/jsp/ui/ResetTag.java | 7 +- .../struts2/views/jsp/ui/SelectTag.java | 7 +- .../struts2/views/jsp/ui/SubmitTag.java | 7 +- .../struts2/views/jsp/ui/TabbedPanelTag.java | 10 +- .../struts2/views/jsp/ui/TextFieldTag.java | 7 +- .../struts2/views/jsp/ui/TextareaTag.java | 7 +- .../apache/struts2/views/jsp/ui/TokenTag.java | 7 +- .../struts2/views/jsp/ui/TreeNodeTag.java | 7 +- .../apache/struts2/views/jsp/ui/TreeTag.java | 7 +- .../struts2/views/jsp/ui/UpDownSelectTag.java | 1 - .../views/jsp/ui/table/WebTableTag.java | 7 +- .../struts2/views/tiles/TilesResult.java | 65 +- .../struts2/views/util/ContextUtil.java | 26 +- .../apache/struts2/views/util/UrlHelper.java | 52 +- .../views/velocity/StrutsResourceLoader.java | 4 +- .../views/velocity/StrutsVelocityContext.java | 7 +- .../views/velocity/StrutsVelocityServlet.java | 30 +- .../views/velocity/VelocityManager.java | 117 +- .../components/AbstractDirective.java | 18 +- .../velocity/components/ActionDirective.java | 7 +- .../components/ActionErrorDirective.java | 9 +- .../components/ActionMessageDirective.java | 9 +- .../velocity/components/AnchorDirective.java | 9 +- .../velocity/components/BeanDirective.java | 7 +- .../components/CheckBoxDirective.java | 7 +- .../components/CheckBoxListDirective.java | 7 +- .../components/ComboBoxDirective.java | 7 +- .../components/ComponentDirective.java | 7 +- .../velocity/components/DateDirective.java | 7 +- .../components/DatePickerDirective.java | 7 +- .../velocity/components/DivDirective.java | 7 +- .../components/DoubleSelectDirective.java | 7 +- .../components/FieldErrorDirective.java | 7 +- .../velocity/components/FileDirective.java | 7 +- .../velocity/components/FormDirective.java | 7 +- .../velocity/components/HeadDirective.java | 7 +- .../velocity/components/HiddenDirective.java | 7 +- .../velocity/components/I18nDirective.java | 7 +- .../velocity/components/IncludeDirective.java | 7 +- .../velocity/components/LabelDirective.java | 7 +- .../components/OptGroupDirective.java | 1 - .../OptionTransferSelectDirective.java | 1 - .../velocity/components/PanelDirective.java | 7 +- .../velocity/components/ParamDirective.java | 7 +- .../components/PasswordDirective.java | 7 +- .../components/PropertyDirective.java | 7 +- .../velocity/components/PushDirective.java | 7 +- .../velocity/components/RadioDirective.java | 7 +- .../velocity/components/ResetDirective.java | 7 +- .../velocity/components/SelectDirective.java | 7 +- .../velocity/components/SetDirective.java | 7 +- .../velocity/components/SubmitDirective.java | 7 +- .../components/TabbedPanelDirective.java | 7 +- .../components/TextAreaDirective.java | 7 +- .../velocity/components/TextDirective.java | 7 +- .../components/TextFieldDirective.java | 7 +- .../velocity/components/TokenDirective.java | 7 +- .../velocity/components/TreeDirective.java | 7 +- .../components/TreeNodeDirective.java | 7 +- .../velocity/components/URLDirective.java | 7 +- .../components/UpDownSelectDirective.java | 1 - .../components/WebTableDirective.java | 7 +- .../views/xslt/AbstractAdapterElement.java | 10 +- .../views/xslt/AbstractAdapterNode.java | 15 +- .../struts2/views/xslt/AdapterFactory.java | 15 +- .../struts2/views/xslt/ArrayAdapter.java | 6 +- .../struts2/views/xslt/BeanAdapter.java | 14 +- .../struts2/views/xslt/CollectionAdapter.java | 9 +- .../apache/struts2/views/xslt/MapAdapter.java | 8 +- .../views/xslt/ProxyElementAdapter.java | 13 +- .../struts2/views/xslt/ProxyNamedNodeMap.java | 2 +- .../struts2/views/xslt/ProxyNodeAdapter.java | 4 +- .../views/xslt/ProxyTextNodeAdapter.java | 2 +- .../views/xslt/ServletURIResolver.java | 11 +- .../views/xslt/SimpleAdapterDocument.java | 22 +- .../struts2/views/xslt/SimpleNodeList.java | 8 +- .../struts2/views/xslt/StringAdapter.java | 12 +- .../apache/struts2/views/xslt/XSLTResult.java | 42 +- .../resources/config-browser/actionNames.ftl | 8 +- .../resources/config-browser/page-header.ftl | 4 +- .../resources/config-browser/showConfig.ftl | 16 +- .../config-browser/tigris-macros.ftl | 4 +- .../org/apache/struts2/default.properties | 7 +- .../org/apache/struts2/dispatcher/error.ftl | 2 +- .../struts2/interceptor/debugging/console.ftl | 2 +- .../org/apache/struts2/interceptor/wait.ftl | 2 +- .../static/dojo/dojo.js.uncompressed.js | 6936 ++++++++--------- .../org/apache/struts2/static/dojo/src/dom.js | 10 +- .../struts2/static/dojo/src/iCalendar.js | 4 +- core/src/main/resources/struts-default.xml | 5 +- .../src/main/resources/template/ajax/head.ftl | 4 +- .../resources/template/ajax/submit-ajax.ftl | 4 +- .../main/resources/template/ajax/textarea.ftl | 2 +- .../src/main/resources/template/ajax/tree.ftl | 26 +- .../main/resources/template/ajax/treenode.ftl | 2 +- .../resources/template/css_xhtml/head.ftl | 2 +- .../resources/template/css_xhtml/label.ftl | 2 +- .../template/simple/checkboxlist.ftl | 4 +- .../resources/template/simple/combobox.ftl | 4 +- .../resources/template/simple/datepicker.ftl | 4 +- .../template/simple/doubleselect.ftl | 12 +- .../main/resources/template/simple/file.ftl | 2 +- .../resources/template/simple/form-close.ftl | 2 + .../main/resources/template/simple/form.ftl | 3 +- .../main/resources/template/simple/head.ftl | 6 +- .../main/resources/template/simple/hidden.ftl | 2 +- .../main/resources/template/simple/label.ftl | 2 +- .../template/simple/optiontransferselect.ftl | 6 +- .../resources/template/simple/password.ftl | 2 +- .../resources/template/simple/radiomap.ftl | 4 +- .../main/resources/template/simple/reset.ftl | 6 +- .../main/resources/template/simple/select.ftl | 4 +- .../main/resources/template/simple/submit.ftl | 6 +- .../template/simple/tabbedpanel-close.ftl | 4 +- .../main/resources/template/simple/table.ftl | 2 +- .../main/resources/template/simple/text.ftl | 2 +- .../resources/template/simple/textarea.ftl | 2 +- .../resources/template/simple/timepicker.ftl | 2 +- .../template/simple/updownselect.ftl | 2 +- .../resources/template/xhtml/checkbox.ftl | 4 +- .../main/resources/template/xhtml/head.ftl | 2 +- .../main/resources/template/xhtml/tooltip.ftl | 4 +- .../struts2/ExecutionCountTestAction.java | 3 +- .../org/apache/struts2/RequestUtilsTest.java | 4 +- .../struts2/ServletActionContextTest.java | 14 +- .../java/org/apache/struts2/TestAction.java | 9 +- .../struts2/TestConfigurationProvider.java | 13 +- .../java/org/apache/struts2/TestResult.java | 14 +- .../struts2/components/ComponentTest.java | 3 +- .../apache/struts2/components/FormTest.java | 7 +- .../struts2/components/PropertyTest.java | 13 +- .../struts2/components/UIComponentTest.java | 24 +- .../template/BaseTemplateEngineTest.java | 5 + .../apache/struts2/config/SettingsTest.java | 11 +- .../struts2/dispatcher/DispatcherTest.java | 36 +- .../dispatcher/FilterDispatcherTest.java | 169 +- .../dispatcher/HttpHeaderResultTest.java | 15 +- .../dispatcher/PlainTextResultTest.java | 7 +- ...ervletDispatchedTestAssertInterceptor.java | 4 +- .../ServletDispatcherResultTest.java | 16 +- .../dispatcher/ServletRedirectResultTest.java | 15 +- .../struts2/dispatcher/SessionMapTest.java | 14 +- .../struts2/dispatcher/StreamResultTest.java | 77 +- .../dispatcher/StrutsResultSupportTest.java | 17 + .../dispatcher/VelocityResultTest.java | 12 +- .../mapper/DefaultActionMapperTest.java | 50 +- .../mapper/RestfulActionMapperTest.java | 6 +- .../org/apache/struts2/impl/MessagesTest.java | 1 - .../struts2/impl/RequestContextTest.java | 21 +- .../CreateSessionInterceptorTest.java | 4 +- .../ExecuteAndWaitInterceptorTest.java | 27 +- .../FileUploadInterceptorTest.java | 22 +- .../ServletConfigInterceptorTest.java | 18 +- .../StrutsConversionErrorInterceptorTest.java | 9 +- .../interceptor/TokenInterceptorTest.java | 17 +- .../TokenSessionStoreInterceptorTest.java | 5 +- .../context/PortletActionContextTest.java | 2 +- .../context/PreparatorServletTest.java | 5 +- .../ServletContextHolderListenerTest.java | 4 +- .../dispatcher/Jsr168DispatcherTest.java | 9 +- .../portlet/result/PortletResultTest.java | 3 +- .../portlet/util/PortletUrlHelperTest.java | 2 +- .../struts2/portlet/util/StrutsUtilTest.java | 10 +- .../struts2/sitegraph/SiteGraphTest.java | 11 +- .../spring/StrutsSpringObjectFactoryTest.java | 5 +- .../util/InvocationSessionStoreTest.java | 9 +- .../apache/struts2/util/TokenHelperTest.java | 1 + .../views/TemplateEngineManagerTest.java | 10 +- .../views/freemarker/FreemarkerTest.java | 9 +- .../struts2/views/freemarker/TestAction.java | 4 +- .../struts2/views/jsp/AbstractTagTest.java | 16 +- .../struts2/views/jsp/AbstractUITagTest.java | 21 +- .../struts2/views/jsp/ActionTagTest.java | 22 +- .../struts2/views/jsp/AnchorTagTest.java | 7 +- .../views/jsp/AppendIteratorTagTest.java | 1 - .../struts2/views/jsp/ElseIfTagTest.java | 9 +- .../apache/struts2/views/jsp/ElseTagTest.java | 14 +- .../apache/struts2/views/jsp/IfTagTest.java | 66 +- .../struts2/views/jsp/IncludeTagTest.java | 6 +- .../views/jsp/IteratorGeneratorTagTest.java | 1 - .../struts2/views/jsp/IteratorTagTest.java | 11 +- .../views/jsp/MergeIteratorTagTest.java | 1 - .../struts2/views/jsp/PortletUrlTagTest.java | 14 +- .../struts2/views/jsp/PropertyTagTest.java | 13 +- .../views/jsp/SortIteratorTagTest.java | 9 +- .../views/jsp/StrutsMockBodyContent.java | 5 +- .../jsp/StrutsMockHttpServletRequest.java | 15 +- .../jsp/StrutsMockHttpServletResponse.java | 4 +- .../views/jsp/StrutsMockHttpSession.java | 4 +- .../views/jsp/StrutsMockJspWriter.java | 3 +- .../views/jsp/StrutsMockPageContext.java | 7 +- .../views/jsp/StrutsMockServletContext.java | 13 +- .../views/jsp/SubsetIteratorTagTest.java | 1 - .../apache/struts2/views/jsp/TextTagTest.java | 35 +- .../apache/struts2/views/jsp/URLTagTest.java | 150 + .../views/jsp/ui/ActionErrorTagTest.java | 2 +- .../views/jsp/ui/ActionMessageTagTest.java | 1 - .../views/jsp/ui/CheckboxListTest.java | 6 +- .../struts2/views/jsp/ui/CheckboxTest.java | 4 +- .../struts2/views/jsp/ui/ComboBoxTest.java | 6 +- .../views/jsp/ui/DatePickerTagTest.java | 5 +- .../struts2/views/jsp/ui/DateTagTest.java | 9 +- .../views/jsp/ui/DoubleSelectTest.java | 6 +- .../views/jsp/ui/FieldErrorTagTest.java | 1 - .../apache/struts2/views/jsp/ui/FileTest.java | 4 +- .../struts2/views/jsp/ui/FormTagTest.java | 25 +- .../struts2/views/jsp/ui/HeadTagTest.java | 2 +- .../struts2/views/jsp/ui/HiddenTest.java | 6 +- .../struts2/views/jsp/ui/JspTemplateTest.java | 11 +- .../struts2/views/jsp/ui/LabelTest.java | 6 +- .../apache/struts2/views/jsp/ui/MockTag.java | 3 +- .../struts2/views/jsp/ui/RadioTest.java | 6 +- .../struts2/views/jsp/ui/ResetTest.java | 6 +- .../struts2/views/jsp/ui/SelectTest.java | 6 +- .../views/jsp/ui/StrutsBodyContent.java | 5 +- .../struts2/views/jsp/ui/SubmitAjaxTest.java | 2 + .../struts2/views/jsp/ui/SubmitTest.java | 6 +- .../struts2/views/jsp/ui/TextareaTest.java | 4 +- .../struts2/views/jsp/ui/TextfieldTest.java | 7 +- .../struts2/views/jsp/ui/TokenTagTest.java | 4 +- .../struts2/views/jsp/ui/TooltipTest.java | 3 +- .../views/jsp/ui/UpDownSelectTagTest.java | 1 - .../struts2/views/util/ContextUtilTest.java | 6 +- .../struts2/views/util/ResourceUtilTest.java | 5 +- .../struts2/views/util/UrlHelperTest.java | 33 +- .../struts2/views/xslt/XSLTResultTest.java | 17 +- .../tutorial/sitegraph/guess-input.ftl | 8 +- .../apache/struts2/views/jsp/ui/Formtag-1.txt | 3 - .../struts2/views/jsp/ui/Formtag-10.txt | 3 - .../struts2/views/jsp/ui/Formtag-11.txt | 4 - .../apache/struts2/views/jsp/ui/Formtag-2.txt | 3 - .../apache/struts2/views/jsp/ui/Formtag-3.txt | 4 - .../apache/struts2/views/jsp/ui/Formtag-4.txt | 4 - .../apache/struts2/views/jsp/ui/Formtag-5.txt | 4 - .../apache/struts2/views/jsp/ui/Formtag-6.txt | 4 - .../apache/struts2/views/jsp/ui/Formtag-7.txt | 4 - .../apache/struts2/views/jsp/ui/Formtag-8.txt | 4 - .../apache/struts2/views/jsp/ui/Formtag-9.txt | 3 - .../test/resources/template/test/checkbox.jsp | 2 +- 509 files changed, 6846 insertions(+), 6845 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/ServletActionContext.java b/core/src/main/java/org/apache/struts2/ServletActionContext.java index ac2152e8c..7de75bc15 100644 --- a/core/src/main/java/org/apache/struts2/ServletActionContext.java +++ b/core/src/main/java/org/apache/struts2/ServletActionContext.java @@ -17,15 +17,14 @@ */ package org.apache.struts2; -import java.util.Map; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.util.OgnlValueStack; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.PageContext; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.util.Map; /** @@ -39,7 +38,6 @@ public class ServletActionContext extends ActionContext implements StrutsStatics public static final String STRUTS_VALUESTACK_KEY = "struts.valueStack"; - @SuppressWarnings("unused") private ServletActionContext(Map context) { super(context); } diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java index 8a7ab1d90..567d205aa 100644 --- a/core/src/main/java/org/apache/struts2/StrutsConstants.java +++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java @@ -122,6 +122,6 @@ public final class StrutsConstants { /** If static content served by the Struts filter should set browser caching header properties or not */ public static final String STRUTS_SERVE_STATIC_BROWSER_CACHE = "struts.serve.static.browserCache"; - /** Whether Struts is in WebWork 2.2 compatibility mode or not */ - public static final String STRUTS_COMPATIBILITY_MODE = "struts.compatibilityMode"; + /** Allows one to disable dynamic method invocation from the URL */ + public static final String STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION = "struts.enable.DynamicMethodInvocation"; } diff --git a/core/src/main/java/org/apache/struts2/StrutsException.java b/core/src/main/java/org/apache/struts2/StrutsException.java index afa774834..5ea450761 100644 --- a/core/src/main/java/org/apache/struts2/StrutsException.java +++ b/core/src/main/java/org/apache/struts2/StrutsException.java @@ -26,9 +26,6 @@ import com.opensymphony.xwork2.util.location.Locatable; */ public class StrutsException extends XWorkException implements Locatable { - private static final long serialVersionUID = 888724366243600135L; - - /** * Constructs a StrutsException with no detail message. */ diff --git a/core/src/main/java/org/apache/struts2/components/ActionComponent.java b/core/src/main/java/org/apache/struts2/components/ActionComponent.java index 2c7c4631d..ac87e4780 100644 --- a/core/src/main/java/org/apache/struts2/components/ActionComponent.java +++ b/core/src/main/java/org/apache/struts2/components/ActionComponent.java @@ -17,29 +17,28 @@ */ package org.apache.struts2.components; -import java.io.IOException; -import java.io.Writer; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.PageContext; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsException; import org.apache.struts2.dispatcher.Dispatcher; import org.apache.struts2.dispatcher.RequestMap; import org.apache.struts2.views.jsp.TagUtils; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.ActionProxyFactory; import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.ServletContext; +import javax.servlet.jsp.PageContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.io.IOException; +import java.io.Writer; +import java.util.HashMap; +import java.util.Map; /** * @@ -93,20 +92,20 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
The following action tag will execute result and include it in this page
*
- * + * *
*
The following action tag will do the same as above, but invokes method specialMethod in action
*
- * + * *
*
The following action tag will not execute result, but put a String in request scope * under an id "stringByAction" which will be retrieved using property tag
- * - * + * + * * * * - * @a2.tag name="action" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ActionTag" + * @s.tag name="action" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ActionTag" * description="Execute an action from within a view" */ public class ActionComponent extends Component { @@ -144,7 +143,7 @@ public class ActionComponent extends Component { } finally { popComponentStack(); } - return end; + return end; } private Map createExtraContext() { @@ -253,7 +252,7 @@ public class ActionComponent extends Component { /** * the id (if speficied) to put the action under stack's context. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setId(String id) { super.setId(id); @@ -261,7 +260,7 @@ public class ActionComponent extends Component { /** * name of the action to be executed (without the extension suffix eg. .action) - * @a2.tagattribute required="true" type="String" + * @s.tagattribute required="true" type="String" */ public void setName(String name) { this.name = name; @@ -269,7 +268,7 @@ public class ActionComponent extends Component { /** * namespace for action to call - * @a2.tagattribute required="false" type="String" default="namespace from where tag is used" + * @s.tagattribute required="false" type="String" default="namespace from where tag is used" */ public void setNamespace(String namespace) { this.namespace = namespace; @@ -277,7 +276,7 @@ public class ActionComponent extends Component { /** * whether the result of this action (probably a view) should be executed/rendered - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setExecuteResult(boolean executeResult) { this.executeResult = executeResult; @@ -285,7 +284,7 @@ public class ActionComponent extends Component { /** * whether the request parameters are to be included when the action is invoked - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setIgnoreContextParams(boolean ignoreContextParams) { this.ignoreContextParams = ignoreContextParams; diff --git a/core/src/main/java/org/apache/struts2/components/ActionError.java b/core/src/main/java/org/apache/struts2/components/ActionError.java index 838694b4a..b5ac53b1c 100644 --- a/core/src/main/java/org/apache/struts2/components/ActionError.java +++ b/core/src/main/java/org/apache/struts2/components/ActionError.java @@ -17,15 +17,15 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * - * Render action errors if they exists the specific layout of the rendering depends on + * Render action errors if they exists the specific layout of the rendering depends on * the theme itself. * * @@ -34,16 +34,16 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * 
- *    <a:actionerror />
- *    <a:form .... >>
+ *
+ *    <s:actionerror />
+ *    <s:form .... >>
  *       ....
- *    </a:form>
- *    
+ *    </s:form>
+ *
  * 
  * 
* - * @a2.tag name="actionerror" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.ui.ActionErrorTag" + * @s.tag name="actionerror" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.ui.ActionErrorTag" * description="Render action errors if they exists" */ public class ActionError extends UIBean { diff --git a/core/src/main/java/org/apache/struts2/components/ActionMessage.java b/core/src/main/java/org/apache/struts2/components/ActionMessage.java index e4006af78..1be6c5ec6 100644 --- a/core/src/main/java/org/apache/struts2/components/ActionMessage.java +++ b/core/src/main/java/org/apache/struts2/components/ActionMessage.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * @@ -34,14 +34,14 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- *    <a:actionmessage />
- *    <a:form .... >
+ *    <s:actionmessage />
+ *    <s:form .... >
  *       ....
- *    </a:form>
+ *    </s:form>
  * 
  * 
* - * @a2.tag name="actionmessage" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.ui.ActionMessageTag" + * @s.tag name="actionmessage" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.ui.ActionMessageTag" * description="Render action messages if they exists" */ public class ActionMessage extends UIBean { diff --git a/core/src/main/java/org/apache/struts2/components/Anchor.java b/core/src/main/java/org/apache/struts2/components/Anchor.java index d6e2c33f0..35b48e25a 100644 --- a/core/src/main/java/org/apache/struts2/components/Anchor.java +++ b/core/src/main/java/org/apache/struts2/components/Anchor.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * @@ -35,10 +35,10 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:a id="link1" theme="ajax" href="/DoIt.action" errorText="An error ocurred" showErrorTransportText="true">
+ * <s:a id="link1" theme="ajax" href="/DoIt.action" errorText="An error ocurred" showErrorTransportText="true">
  *     <img border="none" src="<%=request.getContextPath()%>/images/delete.gif"/>
- *     <a:param name="id" value="1"/>
- * </a:a>
+ *     <s:param name="id" value="1"/>
+ * </s:a>
  * 
  * 
* @@ -71,13 +71,13 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:a id="test" theme="ajax" href="/simpeResult.action" preInvokeJS="confirm(\'You sure\')">
+ * <s:a id="test" theme="ajax" href="/simpeResult.action" preInvokeJS="confirm(\'You sure\')">
  * 	A
- * </a:a>
+ * </s:a>
  * 
  * 
* - * @a2.tag name="a" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.AnchorTag" + * @s.tag name="a" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.AnchorTag" * description="Render a HTML href element that when clicked calls a URL via remote XMLHttpRequest" * */ @@ -115,7 +115,7 @@ public class Anchor extends RemoteCallUIBean { /** * The id to assign the component - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setId(String id) { super.setId(id); @@ -123,7 +123,7 @@ public class Anchor extends RemoteCallUIBean { /** * Topic names to post an event to after the remote call has been made - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setNotifyTopics(String notifyTopics) { this.notifyTopics = notifyTopics; @@ -131,7 +131,7 @@ public class Anchor extends RemoteCallUIBean { /** * A javascript snippet that will be invoked prior to the execution of the target href. If provided must return true or false. True indicates to continue executing target, false says do not execute link target. Possible uses are for confirm dialogs. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setPreInvokeJS(String preInvokeJS) { this.preInvokeJS = preInvokeJS; diff --git a/core/src/main/java/org/apache/struts2/components/AppendIterator.java b/core/src/main/java/org/apache/struts2/components/AppendIterator.java index 9b862bdcb..1a03b831c 100644 --- a/core/src/main/java/org/apache/struts2/components/AppendIterator.java +++ b/core/src/main/java/org/apache/struts2/components/AppendIterator.java @@ -24,10 +24,10 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.apache.struts2.components.Param.UnnamedParametric; import org.apache.struts2.util.AppendIteratorFilter; import org.apache.struts2.util.MakeIterator; - import com.opensymphony.xwork2.util.OgnlValueStack; /** @@ -95,21 +95,21 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * - * <a:append id="myAppendIterator"> - * <a:param value="%{myList1}" /> - * <a:param value="%{myList2}" /> - * <a:param value="%{myList3}" /> - * </a:append> - * <a:iterator value="%{#myAppendIterator}"> - * <a:property /> - * </a:iterator> + * <s:append id="myAppendIterator"> + * <s:param value="%{myList1}" /> + * <s:param value="%{myList2}" /> + * <s:param value="%{myList3}" /> + * </s:append> + * <s:iterator value="%{#myAppendIterator}"> + * <s:property /> + * </s:iterator> * * * * @see org.apache.struts2.util.AppendIteratorFilter * @see org.apache.struts2.views.jsp.iterator.AppendIteratorTag * - * @a2.tag name="append" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.iterator.AppendIteratorTag" + * @s.tag name="append" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.iterator.AppendIteratorTag" * description="Append the values of a list of iterators to one iterator" */ public class AppendIterator extends Component implements UnnamedParametric { @@ -160,7 +160,7 @@ public class AppendIterator extends Component implements UnnamedParametric { /** * the id of which if supplied will have the resultant appended iterator stored under in the stack's context - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setId(String id) { super.setId(id); diff --git a/core/src/main/java/org/apache/struts2/components/Bean.java b/core/src/main/java/org/apache/struts2/components/Bean.java index 9b79fdbe3..9ba8e294f 100644 --- a/core/src/main/java/org/apache/struts2/components/Bean.java +++ b/core/src/main/java/org/apache/struts2/components/Bean.java @@ -17,15 +17,14 @@ */ package org.apache.struts2.components; -import java.io.Writer; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - import com.opensymphony.util.ClassLoaderUtil; import com.opensymphony.xwork2.ObjectFactory; import com.opensymphony.xwork2.util.OgnlUtil; import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.Writer; /** * @@ -51,16 +50,16 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * <-- in freemarker form -->
- * [ww.bean name="org.apache.struts2.example.counter.SimpleCounter" id="counter"]
- *   [a:param name="foo" value="BAR"/]
- *   The value of foo is : [a:property value="foo"/], when inside the bean tag.
- * [/a:bean] + * [@s.bean name="org.apache.struts2.example.counter.SimpleCounter" id="counter"] + * [s:param name="foo" value="BAR"/] + * The value of foo is : [s:property value="foo"/], when inside the bean tag.
+ * [/s:bean] * * <-- in jsp form --> - * <a:bean name="org.apache.struts2.example.counter.SimpleCounter" id="counter"> - * <a:param name="foo" value="BAR" /> - * The value of foot is : <a:property value="foo"/>, when inside the bean tag <br /> - * </a:bean> + * <s:bean name="org.apache.struts2.example.counter.SimpleCounter" id="counter"> + * <s:param name="foo" value="BAR" /> + * The value of foot is : <s:property value="foo"/>, when inside the bean tag <br /> + * </s:bean> * *
*

@@ -71,14 +70,14 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * with the Property tag and get their values.

*

*

In the above example, the id has been set to a value of counter. This means that the SimpleCounter class - * will be placed into the stack's context. You can access the SimpleCounter class using WW's tag:

+ * will be placed into the stack's context. You can access the SimpleCounter class using a Struts tag:

*

*

  * <-- jsp form -->
- * <a:property value="#counter" />
+ * <s:property value="#counter" />
  *
  * <-- freemarker form -->
- * [a:property value="#counter.foo"/]
+ * [s:property value="#counter.foo"/]
  * 
*

*

In the property tag example, the # tells Ognl to search the context for the SimpleCounter class which has @@ -87,7 +86,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * @see Param * - * @a2.tag name="bean" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.BeanTag" + * @s.tag name="bean" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.BeanTag" * description="Instantiate a JavaBean and place it in the context." */ public class Bean extends Component { @@ -138,7 +137,7 @@ public class Bean extends Component { /** * the class name of the bean to be instantiated (must respect JavaBean specification) - * @a2.tagattribute required="true" type="String" + * @s.tagattribute required="true" type="String" */ public void setName(String name) { this.name = name; diff --git a/core/src/main/java/org/apache/struts2/components/Checkbox.java b/core/src/main/java/org/apache/struts2/components/Checkbox.java index 9b48f5b4a..42acfb389 100644 --- a/core/src/main/java/org/apache/struts2/components/Checkbox.java +++ b/core/src/main/java/org/apache/struts2/components/Checkbox.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Renders an HTML input element of type checkbox, populated by the specified property from the OgnlValueStack. @@ -32,7 +32,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *

  * 
  * JSP:
- * <a:checkbox label="checkbox test" name="checkboxField1" value="aBoolean" fieldValue="true"/>
+ * <s:checkbox label="checkbox test" name="checkboxField1" value="aBoolean" fieldValue="true"/>
  *
  * Velocity:
  * #tag( Checkbox "label=checkbox test" "name=checkboxField1" "value=aBoolean" )
@@ -43,7 +43,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack;
  * 
  * 
* - * @a2.tag name="checkbox" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.CheckboxTag" + * @s.tag name="checkbox" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.CheckboxTag" * description="Render a checkbox input field" */ public class Checkbox extends UIBean { @@ -73,7 +73,7 @@ public class Checkbox extends UIBean { /** * The actual HTML value attribute of the checkbox. - * @a2.tagattribute required="false" default="'true'" + * @s.tagattribute required="false" default="'true'" */ public void setFieldValue(String fieldValue) { this.fieldValue = fieldValue; diff --git a/core/src/main/java/org/apache/struts2/components/CheckboxList.java b/core/src/main/java/org/apache/struts2/components/CheckboxList.java index 8e89351b3..42f4a737e 100644 --- a/core/src/main/java/org/apache/struts2/components/CheckboxList.java +++ b/core/src/main/java/org/apache/struts2/components/CheckboxList.java @@ -17,15 +17,15 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * - * Creates a series of checkboxes from a list. Setup is like <a:select /> or <a:radio />, but creates checkbox tags. + * Creates a series of checkboxes from a list. Setup is like <s:select /> or <s:radio />, but creates checkbox tags. * * * @@ -33,11 +33,11 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:checkboxlist name="foo" list="bar"/>
+ * <s:checkboxlist name="foo" list="bar"/>
  * 
  * 
* - * @a2.tag name="checkboxlist" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.CheckboxListTag" + * @s.tag name="checkboxlist" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.CheckboxListTag" * description="Render a list of checkboxes" */ public class CheckboxList extends ListUIBean { diff --git a/core/src/main/java/org/apache/struts2/components/ClosingUIBean.java b/core/src/main/java/org/apache/struts2/components/ClosingUIBean.java index f703452f3..e6e715c33 100644 --- a/core/src/main/java/org/apache/struts2/components/ClosingUIBean.java +++ b/core/src/main/java/org/apache/struts2/components/ClosingUIBean.java @@ -17,15 +17,13 @@ */ package org.apache.struts2.components; -import java.io.Writer; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Writer; /** * ClosingUIBean is the standard superclass for UI components such as div etc. @@ -43,7 +41,7 @@ public abstract class ClosingUIBean extends UIBean { /** * Set template to use for opening the rendered html. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOpenTemplate(String openTemplate) { this.openTemplate = openTemplate; diff --git a/core/src/main/java/org/apache/struts2/components/ComboBox.java b/core/src/main/java/org/apache/struts2/components/ComboBox.java index 461313b66..9324b57ba 100644 --- a/core/src/main/java/org/apache/struts2/components/ComboBox.java +++ b/core/src/main/java/org/apache/struts2/components/ComboBox.java @@ -17,17 +17,19 @@ */ package org.apache.struts2.components; +import java.lang.reflect.Array; +import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.Map; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.util.MakeIterator; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * The combo box is basically an HTML INPUT of type text and HTML SELECT grouped together to give you a combo box @@ -38,7 +40,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * span from first to last. The population is done via javascript, and requires that this tag be surrounded by a * <form>.

* - * Note that unlike the <a:select/> tag, there is no ability to define the individual <option> tags' id attribute + * Note that unlike the <s:select/> tag, there is no ability to define the individual <option> tags' id attribute * or content separately. Each of these is simply populated from the toString() method of the list item. Presumably * this is because the select box isn't intended to actually submit useful data, but to assist the user in filling * out the text field.

@@ -50,15 +52,15 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * JSP: * <-- Example One --> - * <a:bean name="struts.util.Counter" id="year"> - * <a:param name="first" value="text('firstBirthYear')"/> - * <a:param name="last" value="2000"/> + * <s:bean name="struts.util.Counter" id="year"> + * <s:param name="first" value="text('firstBirthYear')"/> + * <s:param name="last" value="2000"/> * - * <a:combobox label="Birth year" size="6" maxlength="4" name="birthYear" list="#year"/> - * </a:bean> + * <s:combobox label="Birth year" size="6" maxlength="4" name="birthYear" list="#year"/> + * </s:bean> * * <-- Example Two --> - * * * <-- Example Two --> - * * * - * @a2.tag name="combobox" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.ComboBoxTag" + * @s.tag name="combobox" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.ComboBoxTag" * description="Widget that fills a text box from a select" */ public class ComboBox extends TextField { @@ -161,7 +163,7 @@ public class ComboBox extends TextField { /** * Iteratable source to populate from. If this is missing, the select widget is simply not displayed. - * @a2.tagattribute required="true" + * @s.tagattribute required="true" */ public void setList(String list) { this.list = list; @@ -169,7 +171,7 @@ public class ComboBox extends TextField { /** * Decide if an empty option is to be inserted. Default false. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setEmptyOption(String emptyOption) { this.emptyOption = emptyOption; @@ -177,7 +179,7 @@ public class ComboBox extends TextField { /** * set the header key for the header option. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setHeaderKey(String headerKey) { this.headerKey = headerKey; @@ -185,7 +187,7 @@ public class ComboBox extends TextField { /** * set the header value for the header option. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setHeaderValue(String headerValue) { this.headerValue = headerValue; @@ -193,7 +195,7 @@ public class ComboBox extends TextField { /** * set the key used to retrive the option key. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setListKey(String listKey) { this.listKey = listKey; @@ -201,7 +203,7 @@ public class ComboBox extends TextField { /** * set the value used to retrive the option value. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setListValue(String listValue) { this.listValue = listValue; diff --git a/core/src/main/java/org/apache/struts2/components/Component.java b/core/src/main/java/org/apache/struts2/components/Component.java index 1d3f7bb26..30f534ba3 100644 --- a/core/src/main/java/org/apache/struts2/components/Component.java +++ b/core/src/main/java/org/apache/struts2/components/Component.java @@ -17,6 +17,21 @@ */ package org.apache.struts2.components; +import org.apache.struts2.StrutsException; +import org.apache.struts2.util.FastByteArrayOutputStream; +import org.apache.struts2.views.jsp.TagUtils; +import org.apache.struts2.views.util.ContextUtil; +import org.apache.struts2.views.util.UrlHelper; +import org.apache.struts2.dispatcher.mapper.ActionMapping; +import org.apache.struts2.dispatcher.mapper.ActionMapper; +import org.apache.struts2.dispatcher.mapper.ActionMapperFactory; +import com.opensymphony.xwork2.util.OgnlValueStack; +import com.opensymphony.xwork2.util.TextParseUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.io.Writer; @@ -25,21 +40,6 @@ import java.util.Iterator; import java.util.Map; import java.util.Stack; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts2.StrutsException; -import org.apache.struts2.dispatcher.mapper.ActionMapper; -import org.apache.struts2.dispatcher.mapper.ActionMapperFactory; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.util.FastByteArrayOutputStream; -import org.apache.struts2.views.jsp.TagUtils; -import org.apache.struts2.views.util.ContextUtil; -import org.apache.struts2.views.util.UrlHelper; - -import com.opensymphony.xwork2.util.OgnlValueStack; -import com.opensymphony.xwork2.util.TextParseUtil; - /** * Base class to extend for UI components. *

@@ -47,6 +47,8 @@ import com.opensymphony.xwork2.util.TextParseUtil; * */ public class Component { + private static final Log LOG = LogFactory.getLog(Component.class); + public static final String COMPONENT_STACK = "__component_stack"; protected OgnlValueStack stack; @@ -322,6 +324,7 @@ public class Component { * @param scheme http or https * @param includeContext should the context path be included or not * @param encodeResult should the url be encoded + * @deprecated Since Struts 2.0.0 * @return the action url. */ protected String determineActionURL(String action, String namespace, String method, @@ -335,6 +338,25 @@ public class Component { return UrlHelper.buildUrl(uri, req, res, parameters, scheme, includeContext, encodeResult); } + /** + * Renders an action URL by consulting the {@link org.apache.struts2.dispatcher.mapper.ActionMapper}. + * @param action the action + * @param namespace the namespace + * @param req HTTP request + * @param res HTTP response + * @param parameters parameters + * @param scheme http or https + * @param includeContext should the context path be included or not + * @param encodeResult should the url be encoded + * @return the action url. + */ + protected String determineActionURL(String action, String namespace, + HttpServletRequest req, HttpServletResponse res, Map parameters, String scheme, + boolean includeContext, boolean encodeResult) { + return determineActionURL(action, namespace, null, req, res, parameters, + scheme, includeContext, encodeResult); + } + /** * Determines the namespace of the current page being renderdd. Useful for Form, URL, and href generations. * @param namespace the namespace @@ -442,7 +464,7 @@ public class Component { /** * id for referencing element. For UI and form tags it will be used as HTML id attribute - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setId(String id) { if (id != null) { diff --git a/core/src/main/java/org/apache/struts2/components/Date.java b/core/src/main/java/org/apache/struts2/components/Date.java index d821337c8..ce53f6e46 100644 --- a/core/src/main/java/org/apache/struts2/components/Date.java +++ b/core/src/main/java/org/apache/struts2/components/Date.java @@ -17,6 +17,12 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.TextProvider; +import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.io.IOException; import java.io.Writer; import java.text.DateFormat; @@ -25,13 +31,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.TextProvider; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * @@ -123,16 +122,16 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *

Examples *

  *  
- *  <a:date name="person.birthday" format="dd/MM/yyyy" />
- *  <a:date name="person.birthday" format="%{getText('some.i18n.key')}" />
- *  <a:date name="person.birthday" nice="true" />
- *  <a:date name="person.birthday" />
+ *  <s:date name="person.birthday" format="dd/MM/yyyy" />
+ *  <s:date name="person.birthday" format="%{getText('some.i18n.key')}" />
+ *  <s:date name="person.birthday" nice="true" />
+ *  <s:date name="person.birthday" />
  *  
  * 
* * Date * - * @a2.tag name="date" tld-body-content="empty" + * @s.tag name="date" tld-body-content="empty" * tld-tag-class="org.apache.struts2.views.jsp.DateTag" * description="Render a formatted date." */ @@ -336,7 +335,7 @@ public class Date extends Component { /** * Date or DateTime format pattern * - * @a2.tagattribute required="false" rtexprvalue="false" + * @s.tagattribute required="false" rtexprvalue="false" */ public void setFormat(String format) { this.format = format; @@ -345,7 +344,7 @@ public class Date extends Component { /** * Whether to print out the date nicely * - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setNice(boolean nice) { this.nice = nice; @@ -361,7 +360,7 @@ public class Date extends Component { /** * The date value to format * - * @a2.tagattribute required="true" type="String" + * @s.tagattribute required="true" type="String" */ public void setName(String name) { this.name = name; diff --git a/core/src/main/java/org/apache/struts2/components/DatePicker.java b/core/src/main/java/org/apache/struts2/components/DatePicker.java index 7272cada4..925cc2e1d 100644 --- a/core/src/main/java/org/apache/struts2/components/DatePicker.java +++ b/core/src/main/java/org/apache/struts2/components/DatePicker.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * @@ -72,9 +72,9 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * Example 1: - * <a:datepicker name="order.date" label="Order Date" /> + * <s:datepicker name="order.date" label="Order Date" /> * Example 2: - * <a:datepicker name="delivery.date" label="Delivery Date" format="#yyyy-#MM-#dd" /> + * <s:datepicker name="delivery.date" label="Delivery Date" format="#yyyy-#MM-#dd" /> * * * @@ -89,12 +89,12 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * 
- * <a:datepicker name="birthday" label="Birthday" templateCss="...." />
+ * <s:datepicker name="birthday" label="Birthday" templateCss="...." />
  * 
  * 
  * 
* - * @a2.tag name="datepicker" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DatePickerTag" + * @s.tag name="datepicker" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DatePickerTag" * description="Render datepicker" */ public class DatePicker extends TextField { @@ -137,7 +137,7 @@ public class DatePicker extends TextField { /** * The format to use for date field. - * @a2.tagattribute required="false" type="String" default="Dateformat specified by language preset (%Y/%m/%d for en)" + * @s.tagattribute required="false" type="String" default="Dateformat specified by language preset (%Y/%m/%d for en)" */ public void setFormat(String format) { this.format = format; @@ -145,7 +145,7 @@ public class DatePicker extends TextField { /** * The date picker icon path - * @a2.tagattribute required="false" type="String" default="/struts/dojo/struts/widgets/dateIcon.gif" + * @s.tagattribute required="false" type="String" default="/struts/dojo/struts/widgets/dateIcon.gif" */ public void setDateIconPath(String dateIconPath) { this.dateIconPath = dateIconPath; @@ -153,7 +153,7 @@ public class DatePicker extends TextField { /** * The datepicker template path. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setTemplatePath(String templatePath) { this.templatePath = templatePath; @@ -161,7 +161,7 @@ public class DatePicker extends TextField { /** * The datepicker template css path. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setTemplateCssPath(String templateCssPath) { this.templateCssPath = templateCssPath; @@ -169,7 +169,7 @@ public class DatePicker extends TextField { /** * The datepicker text field size. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setSize(String size) { this.size = size; diff --git a/core/src/main/java/org/apache/struts2/components/Div.java b/core/src/main/java/org/apache/struts2/components/Div.java index 59c6befd4..ee80de62c 100644 --- a/core/src/main/java/org/apache/struts2/components/Div.java +++ b/core/src/main/java/org/apache/struts2/components/Div.java @@ -17,14 +17,14 @@ */ package org.apache.struts2.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.views.util.UrlHelper; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** * @@ -44,11 +44,11 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:div ... />
+ * <s:div ... />
  * 
  * 
* - * @a2.tag name="div" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DivTag" + * @s.tag name="div" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DivTag" * description="Render HTML div providing content from remote call via AJAX" */ public class Div extends RemoteCallUIBean { @@ -126,7 +126,7 @@ public class Div extends RemoteCallUIBean { /** * How often to re-fetch the content (in milliseconds) - * @a2.tagattribute required="false" type="Integer" default="0" + * @s.tagattribute required="false" type="Integer" default="0" */ public void setUpdateFreq(String updateFreq) { this.updateFreq = updateFreq; @@ -134,7 +134,7 @@ public class Div extends RemoteCallUIBean { /** * How long to wait before fetching the content (in milliseconds) - * @a2.tagattribute required="false" type="Integer" default="0" + * @s.tagattribute required="false" type="Integer" default="0" */ public void setDelay(String delay) { this.delay = delay; @@ -142,7 +142,7 @@ public class Div extends RemoteCallUIBean { /** * The text to display to the user while the new content is being fetched (especially good if the content will take awhile) - * @a2.tagattribute required="false" rtexprvalue="true" + * @s.tagattribute required="false" rtexprvalue="true" */ public void setLoadingText(String loadingText) { this.loadingText = loadingText; @@ -150,7 +150,7 @@ public class Div extends RemoteCallUIBean { /** * Topic name to listen to (comma delimited), that will cause the DIV's content to be re-fetched - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setListenTopics(String listenTopics) { this.listenTopics = listenTopics; diff --git a/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java b/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java index df9eba4d1..da19d5beb 100644 --- a/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java +++ b/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java @@ -19,11 +19,11 @@ package org.apache.struts2.components; import java.util.Map; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * DoubleListUIBean is the standard superclass of all Struts double list handling components. * @@ -257,7 +257,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The second iterable source to populate from. - * @a2.tagattribute required="true" + * @s.tagattribute required="true" */ public void setDoubleList(String doubleList) { this.doubleList = doubleList; @@ -265,7 +265,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The key expression to use for second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleListKey(String doubleListKey) { this.doubleListKey = doubleListKey; @@ -273,7 +273,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The value expression to use for second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleListValue(String doubleListValue) { this.doubleListValue = doubleListValue; @@ -281,7 +281,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The name for complete component - * @a2.tagattribute required="true" + * @s.tagattribute required="true" */ public void setDoubleName(String doubleName) { this.doubleName = doubleName; @@ -289,7 +289,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The value expression for complete component - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleValue(String doubleValue) { this.doubleValue = doubleValue; @@ -297,7 +297,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The form name this component resides in and populates to - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setFormName(String formName) { this.formName = formName; @@ -309,7 +309,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The css class for the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleCssClass(String doubleCssClass) { this.doubleCssClass = doubleCssClass; @@ -321,7 +321,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The css style for the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleCssStyle(String doubleCssStyle) { this.doubleCssStyle = doubleCssStyle; @@ -333,7 +333,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The header key for the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleHeaderKey(String doubleHeaderKey) { this.doubleHeaderKey = doubleHeaderKey; @@ -345,7 +345,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The header value for the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleHeaderValue(String doubleHeaderValue) { this.doubleHeaderValue = doubleHeaderValue; @@ -357,7 +357,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Decides if the second list will add an empty option - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleEmptyOption(String doubleEmptyOption) { this.doubleEmptyOption = doubleEmptyOption; @@ -374,7 +374,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Decides if a disable attribute should be added to the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleDisabled(String doubleDisabled) { this.doubleDisabled = doubleDisabled; @@ -386,7 +386,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * The id of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleId(String doubleId) { this.doubleId = doubleId; @@ -398,7 +398,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Decides if multiple attribute should be set on the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleMultiple(String doubleMultiple) { this.doubleMultiple = doubleMultiple; @@ -410,7 +410,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onblur attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnblur(String doubleOnblur) { this.doubleOnblur = doubleOnblur; @@ -422,7 +422,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onchange attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnchange(String doubleOnchange) { this.doubleOnchange = doubleOnchange; @@ -434,7 +434,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onclick attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnclick(String doubleOnclick) { this.doubleOnclick = doubleOnclick; @@ -446,7 +446,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the ondbclick attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOndblclick(String doubleOndblclick) { this.doubleOndblclick = doubleOndblclick; @@ -458,7 +458,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onfocus attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnfocus(String doubleOnfocus) { this.doubleOnfocus = doubleOnfocus; @@ -470,7 +470,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onkeydown attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnkeydown(String doubleOnkeydown) { this.doubleOnkeydown = doubleOnkeydown; @@ -482,7 +482,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onkeypress attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnkeypress(String doubleOnkeypress) { this.doubleOnkeypress = doubleOnkeypress; @@ -494,7 +494,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onkeyup attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnkeyup(String doubleOnkeyup) { this.doubleOnkeyup = doubleOnkeyup; @@ -506,7 +506,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onmousedown attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnmousedown(String doubleOnmousedown) { this.doubleOnmousedown = doubleOnmousedown; @@ -518,7 +518,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onmousemove attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnmousemove(String doubleOnmousemove) { this.doubleOnmousemove = doubleOnmousemove; @@ -530,7 +530,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onmouseout attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnmouseout(String doubleOnmouseout) { this.doubleOnmouseout = doubleOnmouseout; @@ -542,7 +542,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onmouseover attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnmouseover(String doubleOnmouseover) { this.doubleOnmouseover = doubleOnmouseover; @@ -554,7 +554,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onmouseup attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnmouseup(String doubleOnmouseup) { this.doubleOnmouseup = doubleOnmouseup; @@ -566,7 +566,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the onselect attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleOnselect(String doubleOnselect) { this.doubleOnselect = doubleOnselect; @@ -578,7 +578,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the size attribute of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleSize(String doubleSize) { this.doubleSize = doubleSize; @@ -590,7 +590,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the list key of the second attribute - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public String getDoubleListKey() { return doubleListKey; @@ -610,7 +610,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Decides of an empty option is to be inserted in the second list - * @a2.tagattribute required="false" default="false" type="Boolean" + * @s.tagattribute required="false" default="false" type="Boolean" */ public void setEmptyOption(String emptyOption) { this.emptyOption = emptyOption; @@ -618,7 +618,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the header key of the second list. Must not be empty! "'-1'" and "''" is correct, "" is bad. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setHeaderKey(String headerKey) { this.headerKey = headerKey; @@ -626,7 +626,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the header value of the second list - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setHeaderValue(String headerValue) { this.headerValue = headerValue; @@ -634,7 +634,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setMultiple(String multiple) { // TODO: Passing a Collection may work too? @@ -643,7 +643,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Size of the element box (# of elements to show) - * @a2.tagattribute required="false" type="Integer" + * @s.tagattribute required="false" type="Integer" */ public void setSize(String size) { this.size = size; @@ -651,7 +651,7 @@ public abstract class DoubleListUIBean extends ListUIBean { /** * Set the html accesskey attribute. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDoubleAccesskey(String doubleAccesskey) { this.doubleAccesskey = doubleAccesskey; diff --git a/core/src/main/java/org/apache/struts2/components/DoubleSelect.java b/core/src/main/java/org/apache/struts2/components/DoubleSelect.java index 235a1a998..b7612318b 100644 --- a/core/src/main/java/org/apache/struts2/components/DoubleSelect.java +++ b/core/src/main/java/org/apache/struts2/components/DoubleSelect.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Renders two HTML select elements with second one changing displayed values depending on selected entry of first one. @@ -31,12 +31,12 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:doubleselect label="doubleselect test1" name="menu" list="{'fruit','other'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
- * <a:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruits', 'other':'Other Dishes'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
+ * <s:doubleselect label="doubleselect test1" name="menu" list="{'fruit','other'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
+ * <s:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruits', 'other':'Other Dishes'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
  * 
  * 
* - * @a2.tag name="doubleselect" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DoubleSelectTag" + * @s.tag name="doubleselect" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DoubleSelectTag" * description="Renders two HTML select elements with second one changing displayed values depending on selected entry of first one." */ public class DoubleSelect extends DoubleListUIBean { diff --git a/core/src/main/java/org/apache/struts2/components/Else.java b/core/src/main/java/org/apache/struts2/components/Else.java index 75dcffbf7..e395264e5 100644 --- a/core/src/main/java/org/apache/struts2/components/Else.java +++ b/core/src/main/java/org/apache/struts2/components/Else.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import java.io.Writer; import java.util.Map; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * @@ -39,19 +39,19 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- *  <a:if test="%{false}">
+ *  <s:if test="%{false}">
  * 	    <div>Will Not Be Executed</div>
- *  </a:if>
- * 	<a:elseif test="%{true}">
+ *  </s:if>
+ * 	<s:elseif test="%{true}">
  * 	    <div>Will Be Executed</div>
- *  </a:elseif>
- *  <a:else>
+ *  </s:elseif>
+ *  <s:else>
  * 	    <div>Will Not Be Executed</div>
- *  </a:else>
+ *  </s:else>
  * 
  * 
* - * @a2.tag name="else" bodycontent="JSP" description="Else tag" tld-tag-class="org.apache.struts2.views.jsp.ElseTag" + * @s.tag name="else" bodycontent="JSP" description="Else tag" tld-tag-class="org.apache.struts2.views.jsp.ElseTag" */ public class Else extends Component { public Else(OgnlValueStack stack) { @@ -65,6 +65,5 @@ public class Else extends Component { context.remove(If.ANSWER); return !((ifResult == null) || (ifResult.booleanValue())); - } } diff --git a/core/src/main/java/org/apache/struts2/components/ElseIf.java b/core/src/main/java/org/apache/struts2/components/ElseIf.java index 9f3b431e0..c43d896f2 100644 --- a/core/src/main/java/org/apache/struts2/components/ElseIf.java +++ b/core/src/main/java/org/apache/struts2/components/ElseIf.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.components; -import java.io.Writer; - import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.Writer; + /** * * @@ -43,19 +43,19 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- *  <a:if test="%{false}">
+ *  <s:if test="%{false}">
  * 	    <div>Will Not Be Executed</div>
- *  </a:if>
- * 	<a:elseif test="%{true}">
+ *  </s:if>
+ * 	<s:elseif test="%{true}">
  * 	    <div>Will Be Executed</div>
- *  </a:elseif>
- *  <a:else>
+ *  </s:elseif>
+ *  <s:else>
  * 	    <div>Will Not Be Executed</div>
- *  </a:else>
+ *  </s:else>
  * 
  * 
* - * @a2.tag name="elseif" tld-body-content="JSP" description="Elseif tag" tld-tag-class="org.apache.struts2.views.jsp.ElseIfTag" + * @s.tag name="elseif" tld-body-content="JSP" description="Elseif tag" tld-tag-class="org.apache.struts2.views.jsp.ElseIfTag" */ public class ElseIf extends Component { public ElseIf(OgnlValueStack stack) { @@ -67,7 +67,7 @@ public class ElseIf extends Component { public boolean start(Writer writer) { Boolean ifResult = (Boolean) stack.getContext().get(If.ANSWER); - + if ((ifResult == null) || (ifResult.booleanValue())) { return false; } @@ -85,13 +85,18 @@ public class ElseIf extends Component { } public boolean end(Writer writer, String body) { - + if (answer == null) { + answer = Boolean.FALSE; + } + if (answer.booleanValue()) { + stack.getContext().put(If.ANSWER, answer); + } return super.end(writer, ""); } /** * Expression to determine if body of tag is to be displayed - * @a2.tagattribute required="true" type="Boolean" + * @s.tagattribute required="true" type="Boolean" */ public void setTest(String test) { this.test = test; diff --git a/core/src/main/java/org/apache/struts2/components/FieldError.java b/core/src/main/java/org/apache/struts2/components/FieldError.java index fb465a061..56df3ec65 100644 --- a/core/src/main/java/org/apache/struts2/components/FieldError.java +++ b/core/src/main/java/org/apache/struts2/components/FieldError.java @@ -17,15 +17,13 @@ */ package org.apache.struts2.components; -import java.util.ArrayList; -import java.util.List; +import org.apache.struts2.components.Param.UnnamedParametric; +import com.opensymphony.xwork2.util.OgnlValueStack; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import org.apache.struts2.components.Param.UnnamedParametric; - -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.util.ArrayList; +import java.util.List; /** * @@ -40,26 +38,26 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * <!-- example 1 --> - * <a:fielderror /> + * <s:fielderror /> * * <!-- example 2 --> - * <a:fielderror> - * <a:param>field1</a:param> - * <a:param>field2</a:param> - * </a:fielderror> - * <a:form .... >> + * <s:fielderror> + * <s:param>field1</s:param> + * <s:param>field2</s:param> + * </s:fielderror> + * <s:form .... >> * .... - * </a:form> + * </s:form> * * OR * - * <a:fielderror> - * <a:param value="%{'field1'}" /> - * <a:param value="%{'field2'}" /> - * </a:fielderror> - * <a:form .... >> + * <s:fielderror> + * <s:param value="%{'field1'}" /> + * <s:param value="%{'field2'}" /> + * </s:fielderror> + * <s:form .... >> * .... - * </a:form> + * </s:form> * * * @@ -77,7 +75,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * - * @a2.tag name="fielderror" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.FieldErrorTag" + * @s.tag name="fielderror" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.FieldErrorTag" * description="Render field error (all or partial depending on param tag nested)if they exists" */ public class FieldError extends UIBean implements UnnamedParametric { diff --git a/core/src/main/java/org/apache/struts2/components/File.java b/core/src/main/java/org/apache/struts2/components/File.java index 581ef5bf9..432f1acab 100644 --- a/core/src/main/java/org/apache/struts2/components/File.java +++ b/core/src/main/java/org/apache/struts2/components/File.java @@ -17,14 +17,14 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Renders an HTML file input element. @@ -34,12 +34,12 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:file name="anUploadFile" accept="text/*" />
- * <a:file name="anohterUploadFIle" accept="text/html,text/plain" />
+ * <s:file name="anUploadFile" accept="text/*" />
+ * <s:file name="anohterUploadFIle" accept="text/html,text/plain" />
  * 
  * 
* - * @a2.tag name="file" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.FileTag" + * @s.tag name="file" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.FileTag" * description="Render a file input field" */ public class File extends UIBean { @@ -66,13 +66,13 @@ public class File extends UIBean { String encType = (String) form.getParameters().get("enctype"); if (!"multipart/form-data".equals(encType)) { // uh oh, this isn't good! Let's warn the developer - log.warn("Struts has detected a file upload UI tag (a:file) being used without a form set to enctype 'multipart/form-data'. This is probably an error!"); + log.warn("Struts has detected a file upload UI tag (s:file) being used without a form set to enctype 'multipart/form-data'. This is probably an error!"); } String method = (String) form.getParameters().get("method"); if (!"post".equalsIgnoreCase(method)) { // uh oh, this isn't good! Let's warn the developer - log.warn("Struts has detected a file upload UI tag (a:file) being used without a form set to method 'POST'. This is probably an error!"); + log.warn("Struts has detected a file upload UI tag (s:file) being used without a form set to method 'POST'. This is probably an error!"); } } @@ -87,7 +87,7 @@ public class File extends UIBean { /** * HTML accept attribute to indicate accepted file mimetypes - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAccept(String accept) { this.accept = accept; @@ -95,7 +95,7 @@ public class File extends UIBean { /** * HTML size attribute - * @a2.tagattribute required="false" type="Integer" + * @s.tagattribute required="false" type="Integer" */ public void setSize(String size) { this.size = size; diff --git a/core/src/main/java/org/apache/struts2/components/Form.java b/core/src/main/java/org/apache/struts2/components/Form.java index f7ec923c1..f83e88743 100644 --- a/core/src/main/java/org/apache/struts2/components/Form.java +++ b/core/src/main/java/org/apache/struts2/components/Form.java @@ -17,24 +17,6 @@ */ package org.apache.struts2.components; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang.StringUtils; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.dispatcher.Dispatcher; -import org.apache.struts2.dispatcher.mapper.ActionMapperFactory; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.portlet.context.PortletActionContext; -import org.apache.struts2.portlet.util.PortletUrlHelper; -import org.apache.struts2.views.util.UrlHelper; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ObjectFactory; @@ -48,6 +30,20 @@ import com.opensymphony.xwork2.validator.ActionValidatorManagerFactory; import com.opensymphony.xwork2.validator.FieldValidator; import com.opensymphony.xwork2.validator.ValidationInterceptor; import com.opensymphony.xwork2.validator.Validator; +import org.apache.commons.lang.StringUtils; +import org.apache.struts2.StrutsConstants; +import org.apache.struts2.config.Settings; +import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.dispatcher.mapper.ActionMapperFactory; +import org.apache.struts2.dispatcher.mapper.ActionMapping; +import org.apache.struts2.portlet.context.PortletActionContext; +import org.apache.struts2.portlet.util.PortletUrlHelper; +import org.apache.struts2.views.util.UrlHelper; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.*; +import java.util.Set; /** * @@ -82,18 +78,20 @@ import com.opensymphony.xwork2.validator.Validator; *
  * 
  * 

- * <a:form ... /> + * <s:form ... /> *

* *

* - * @a2.tag name="form" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.FormTag" + * @s.tag name="form" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.FormTag" * description="Renders an input form" */ public class Form extends ClosingUIBean { public static final String OPEN_TEMPLATE = "form"; public static final String TEMPLATE = "form-close"; + private int sequence = 0; + protected String onsubmit; protected String action; protected String target; @@ -104,13 +102,6 @@ public class Form extends ClosingUIBean { protected String portletMode; protected String windowState; protected String acceptcharset; - protected static boolean compatibilityMode = false; - - static { - if (org.apache.struts2.config.Settings.isSet(StrutsConstants.STRUTS_COMPATIBILITY_MODE)) { - compatibilityMode = "true".equals(org.apache.struts2.config.Settings.get(StrutsConstants.STRUTS_COMPATIBILITY_MODE)); - } - } public Form(OgnlValueStack stack, HttpServletRequest request, HttpServletResponse response) { super(stack, request, response); @@ -136,14 +127,14 @@ public class Form extends ClosingUIBean { protected void evaluateExtraParams() { super.evaluateExtraParams(); - boolean isAjax = "ajax".equalsIgnoreCase(this.theme); + //boolean isAjax = "ajax".equalsIgnoreCase(this.theme); if (validate != null) { addParameter("validate", findValue(validate, Boolean.class)); } // calculate the action and namespace - String action = null; + /*String action = null; if (this.action != null) { // if it isn't specified, we'll make somethig up action = findString(this.action); @@ -155,7 +146,7 @@ public class Form extends ClosingUIBean { String namespace = determineNamespace(this.namespace, getStack(), request); evaluateExtraParamsServletRequest(action, namespace, isAjax); - } + }*/ if (onsubmit != null) { addParameter("onsubmit", findString(onsubmit)); @@ -184,6 +175,34 @@ public class Form extends ClosingUIBean { addParameter("tagNames", new ArrayList()); } } + + /** + * Form component determine the its HTML element id as follows:- + *
    + *
  1. if an 'id' attribute is specified.
  2. + *
  3. if an 'action' attribute is specified, it will be used as the id.
  4. + *
+ */ + protected void populateComponentHtmlId(Form form) { + boolean isAjax = "ajax".equalsIgnoreCase(this.theme); + + String action = null; + if (this.action != null) { + // if it isn't specified, we'll make somethig up + action = findString(this.action); + } + + if (id != null) { + addParameter("id", escape(id)); + } + if (Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest()) { + evaluateExtraParamsPortletRequest(namespace, action); + } else { + String namespace = determineNamespace(this.namespace, getStack(), + request); + evaluateExtraParamsServletRequest(action, namespace, isAjax); + } + } /** * @param isAjax @@ -205,10 +224,16 @@ public class Form extends ClosingUIBean { } String actionMethod = ""; - if (compatibilityMode && action.indexOf("!") != -1) { - int endIdx = action.lastIndexOf("!"); - actionMethod = action.substring(endIdx + 1, action.length()); - action = action.substring(0, endIdx); + // FIXME: our implementation is flawed - the only concept of ! should be in DefaultActionMapper + boolean allowDynamicMethodCalls = "true".equals(Settings.get(StrutsConstants.STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION)); + + // handle "name!method" convention. + if (allowDynamicMethodCalls) { + if (action.indexOf("!") != -1) { + int endIdx = action.lastIndexOf("!"); + actionMethod = action.substring(endIdx + 1, action.length()); + action = action.substring(0, endIdx); + } } Configuration config = Dispatcher.getInstance().getConfigurationManager().getConfiguration(); @@ -374,12 +399,23 @@ public class Form extends ClosingUIBean { return validators; } + + /** + * Get a incrementing sequence unique to this Form component. + * It is used by Form component's child that might need a + * sequence to make them unique. + * + * @return int + */ + protected int getSequence() { + return sequence++; + } /** * HTML onsubmit attribute * - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnsubmit(String onsubmit) { this.onsubmit = onsubmit; @@ -388,7 +424,7 @@ public class Form extends ClosingUIBean { /** * Set action nane to submit to, without .action suffix * - * @a2.tagattribute required="false" default="current action" + * @s.tagattribute required="false" default="current action" */ public void setAction(String action) { this.action = action; @@ -397,7 +433,7 @@ public class Form extends ClosingUIBean { /** * HTML form target attribute * - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setTarget(String target) { this.target = target; @@ -406,7 +442,7 @@ public class Form extends ClosingUIBean { /** * HTML form enctype attribute * - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setEnctype(String enctype) { this.enctype = enctype; @@ -415,7 +451,7 @@ public class Form extends ClosingUIBean { /** * HTML form method attribute * - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setMethod(String method) { this.method = method; @@ -424,7 +460,7 @@ public class Form extends ClosingUIBean { /** * namespace for action to submit to * - * @a2.tagattribute required="false" default="current namespace" + * @s.tagattribute required="false" default="current namespace" */ public void setNamespace(String namespace) { this.namespace = namespace; @@ -433,7 +469,7 @@ public class Form extends ClosingUIBean { /** * Whether client side/remote validation should be performed. Only useful with theme xhtml/ajax * - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setValidate(String validate) { this.validate = validate; @@ -442,7 +478,7 @@ public class Form extends ClosingUIBean { /** * The portlet mode to display after the form submit * - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setPortletMode(String portletMode) { this.portletMode = portletMode; @@ -451,7 +487,7 @@ public class Form extends ClosingUIBean { /** * The window state to display after the form submit * - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setWindowState(String windowState) { this.windowState = windowState; @@ -460,7 +496,7 @@ public class Form extends ClosingUIBean { /** * The accepted charsets for this form. The values may be comma or blank delimited. * - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAcceptcharset(String acceptcharset) { this.acceptcharset = acceptcharset; diff --git a/core/src/main/java/org/apache/struts2/components/FormButton.java b/core/src/main/java/org/apache/struts2/components/FormButton.java index 16789f5b4..d0d0df9ed 100644 --- a/core/src/main/java/org/apache/struts2/components/FormButton.java +++ b/core/src/main/java/org/apache/struts2/components/FormButton.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * FormButton. */ @@ -40,7 +40,9 @@ public abstract class FormButton extends UIBean { super(stack, request, response); } - public void evaluateParams() { + //public void evaluateParams() { + public void evaluateExtraParams() { + super.evaluateExtraParams(); if (align == null) { align = "right"; } @@ -51,7 +53,7 @@ public abstract class FormButton extends UIBean { submitType = type; } - super.evaluateParams(); + //super.evaluateParams(); addParameter("type", submitType); @@ -78,18 +80,66 @@ public abstract class FormButton extends UIBean { addParameter("align", findString(align)); } + + /** + * Override UIBean's implementation, such that component Html id is determined + * in the following order :- + *
    + *
  1. This component id attribute
  2. + *
  3. [containing_form_id]_[this_component_name]
  4. + *
  5. [containing_form_id]_[this_component_action]_[this_component_method]
  6. + *
  7. [containing_form_id]_[this_component_method]
  8. + *
  9. [this_component_name]
  10. + *
  11. [this_component_action]_[this_component_method]
  12. + *
  13. [this_component_method]
  14. + *
  15. [an increasing sequential number unique to the form starting with 0]
  16. + *
+ */ + protected void populateComponentHtmlId(Form form) { + String _tmp_id = ""; + if (id != null) { + // this check is needed for backwards compatibility with 2.1.x + if (altSyntax()) { + _tmp_id = findString(id); + } else { + _tmp_id = id; + } + } + else { + if (form != null && form.getParameters().get("id") != null) { + _tmp_id = _tmp_id + form.getParameters().get("id").toString() + "_"; + } + if (name != null) { + _tmp_id = _tmp_id + escape(name); + } else if (action != null || method != null){ + if (action != null) { + _tmp_id = _tmp_id + escape(action); + } + if (method != null) { + _tmp_id = _tmp_id + "_" + escape(method); + } + } else { + // if form is null, this component is used, without a form, i guess + // there's not much we could do then. + if (form != null) { + _tmp_id = _tmp_id + form.getSequence(); + } + } + } + addParameter("id", _tmp_id); + } /** - * Indicate whether the concrete button supports the type "image". - * - * @return true if type image is supported. - */ + * Indicate whether the concrete button supports the type "image". + * + * @return true if type image is supported. + */ protected abstract boolean supportsImageType(); /** * Set action attribute. * - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setAction(String action) { this.action = action; @@ -98,7 +148,7 @@ public abstract class FormButton extends UIBean { /** * Set method attribute. * - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setMethod(String method) { this.method = method; @@ -107,7 +157,7 @@ public abstract class FormButton extends UIBean { /** * HTML align attribute. * - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setAlign(String align) { this.align = align; @@ -116,7 +166,7 @@ public abstract class FormButton extends UIBean { /** * The type of submit to use. Valid values are input, button and image. * - * @a2.tagattribute required="false" type="String" default="input" + * @s.tagattribute required="false" type="String" default="input" */ public void setType(String type) { this.type = type; diff --git a/core/src/main/java/org/apache/struts2/components/GenericUIBean.java b/core/src/main/java/org/apache/struts2/components/GenericUIBean.java index 596fe0872..27fbe8d74 100644 --- a/core/src/main/java/org/apache/struts2/components/GenericUIBean.java +++ b/core/src/main/java/org/apache/struts2/components/GenericUIBean.java @@ -17,12 +17,11 @@ */ package org.apache.struts2.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.struts2.util.ContainUtil; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** * @@ -34,7 +33,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * Objects provided can be retrieve from within the template via $parameters._paramname_.

* * Jsp:

- * Objects provided can be retrieve from within the template via <saf:property value="%{parameters._paramname_}" />

+ * Objects provided can be retrieve from within the template via <s:property value="%{parameters._paramname_}" />

* * * In the bottom JSP and Velocity samples, two parameters are being passed in to the component. From within the @@ -44,8 +43,8 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * $parameters.get('key1') and $parameters.get('key2') or $parameters.key1 and $parameters.key2

* * Jsp:

- * <saf:property value="%{parameters.key1}" /> and <saf:property value="%{'parameters.key2'}" /> or - * <saf:property value="%{parameters.get('key1')}" /> and <saf:property value="%{parameters.get('key2')}" />

+ * <s:property value="%{parameters.key1}" /> and <s:property value="%{'parameters.key2'}" /> or + * <s:property value="%{parameters.get('key1')}" /> and <s:property value="%{parameters.get('key2')}" />

* * Currently, your custom UI components can be written in Velocity, JSP, or Freemarker, and the correct rendering * engine will be found based on file extension.

@@ -62,34 +61,34 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *

  * 
  * JSP
- *     <a:component template="/my/custom/component.vm"/>
+ *     <s:component template="/my/custom/component.vm"/>
  *     
  *       or
  *
- *     <a:component template="/my/custom/component.vm">
- *       <a:param name="key1" value="value1"/>
- *       <a:param name="key2" value="value2"/>
- *     </a:component>
+ *     <s:component template="/my/custom/component.vm">
+ *       <s:param name="key1" value="value1"/>
+ *       <s:param name="key2" value="value2"/>
+ *     </s:component>
  *
  * Velocity
- *     #safcomponent( "template=/my/custom/component.vm" )
+ *     #s-component( "template=/my/custom/component.vm" )
  *
  *       or
  *
- *     #safcomponent( "template=/my/custom/component.vm" )
- *       #safparam( "name=key1" "value=value1" )
- *       #safparam( "name=key2" "value=value2" )
+ *     #s-component( "template=/my/custom/component.vm" )
+ *       #s-param( "name=key1" "value=value1" )
+ *       #s-param( "name=key2" "value=value2" )
  *     #end
  *     
  * Freemarker
- *    <@saf.component template="/my/custom/component.ftl" />
+ *    <@s..component template="/my/custom/component.ftl" />
  *    
  *      or
  *      
- *    <@saf.component template="/my/custom/component.ftl">
- *       <@saf.param name="key1" value="%{'value1'}" />
- *       <@saf.param name="key2" value="%{'value2'}" />
- *    </@saf.component>
+ *    <@s..component template="/my/custom/component.ftl">
+ *       <@s..param name="key1" value="%{'value1'}" />
+ *       <@s..param name="key2" value="%{'value2'}" />
+ *    </@s..component>
  *     
  * 
  * 
@@ -105,7 +104,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * - * @a2.tag name="component" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.ComponentTag" + * @s.tag name="component" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.ComponentTag" * description="Render a custom ui widget" */ public class GenericUIBean extends UIBean { diff --git a/core/src/main/java/org/apache/struts2/components/Head.java b/core/src/main/java/org/apache/struts2/components/Head.java index e9cf91928..b68f28737 100644 --- a/core/src/main/java/org/apache/struts2/components/Head.java +++ b/core/src/main/java/org/apache/struts2/components/Head.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.struts2.config.Settings; +import org.apache.struts2.StrutsConstants; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.config.Settings; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * @@ -48,7 +47,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * <head> * <title>My page</title> - * <a:head/> + * <s:head/> * </head> * * @@ -57,7 +56,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * <head> * <title>My page</title> - * <a:head theme="ajax" calendarcss="calendar-green"/> + * <s:head theme="ajax" calendarcss="calendar-green"/> * </head> * * @@ -66,12 +65,12 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * <head> * <title>My page</title> - * <a:head theme="ajax" debug="true"/> + * <s:head theme="ajax" debug="true"/> * </head> * * * - * @a2.tag name="head" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.ui.HeadTag" + * @s.tag name="head" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.ui.HeadTag" * description="Render a chunk of HEAD for your HTML file" */ public class Head extends UIBean { @@ -112,7 +111,7 @@ public class Head extends UIBean { /** * The jscalendar css theme to use" default="calendar-blue.css - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setCalendarcss(String calendarcss) { this.calendarcss = calendarcss; @@ -124,7 +123,7 @@ public class Head extends UIBean { /** * Set to true to enable debugging mode for AJAX themes - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDebug(boolean debug) { this.debug = debug; diff --git a/core/src/main/java/org/apache/struts2/components/Hidden.java b/core/src/main/java/org/apache/struts2/components/Hidden.java index 6b81ba987..b51596a89 100644 --- a/core/src/main/java/org/apache/struts2/components/Hidden.java +++ b/core/src/main/java/org/apache/struts2/components/Hidden.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Renders an HTML input element of type hidden, populated by the specified property from the OgnlValueStack. @@ -32,9 +32,9 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * <-- example one -->
- * <a:hidden name="foo" />
+ * <s:hidden name="foo" />
  * <-- example two -->
- * <a:hidden name="foo" value="bar" />
+ * <s:hidden name="foo" value="bar" />
  *
  * Example One Resulting HTML (if foo evaluates to bar):
  * <input type="hidden" name="foo" value="bar" />
@@ -43,7 +43,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack;
  * 
  * 
* - * @a2.tag name="hidden" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.HiddenTag" + * @s.tag name="hidden" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.HiddenTag" * description="Render a hidden input field" */ public class Hidden extends UIBean { diff --git a/core/src/main/java/org/apache/struts2/components/I18n.java b/core/src/main/java/org/apache/struts2/components/I18n.java index 29ef56ad5..0a6147515 100644 --- a/core/src/main/java/org/apache/struts2/components/I18n.java +++ b/core/src/main/java/org/apache/struts2/components/I18n.java @@ -17,17 +17,18 @@ */ package org.apache.struts2.components; -import java.io.Writer; -import java.util.Locale; -import java.util.ResourceBundle; - -import org.apache.struts2.StrutsException; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.LocaleProvider; import com.opensymphony.xwork2.TextProviderSupport; import com.opensymphony.xwork2.util.LocalizedTextUtil; import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.struts2.StrutsException; + +import java.io.Writer; +import java.util.Locale; +import java.util.ResourceBundle; /** * @@ -55,9 +56,9 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * 
- * <a:i18n name="myCustomBundle">
- *    The i18n value for key aaa.bbb.ccc in myCustomBundle is <a:property value="text('aaa.bbb.ccc')" />
- * </a:i18n>
+ * <s:i18n name="myCustomBundle">
+ *    The i18n value for key aaa.bbb.ccc in myCustomBundle is <s:property value="text('aaa.bbb.ccc')" />
+ * </s:i18n>
  * 
  * 
  * 
@@ -66,17 +67,19 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * 
- * <a:i18n name="some.package.bundle" >
- *      <a:text name="some.key" />
- * </a:i18n>
+ * <s:i18n name="some.package.bundle" >
+ *      <s:text name="some.key" />
+ * </s:i18n>
  * 
  * 
  * 
* - * @a2.tag name="i18n" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.I18nTag" + * @s.tag name="i18n" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.I18nTag" * description="Get a resource bundle and place it on the value stack" */ public class I18n extends Component { + private static final Log LOG = LogFactory.getLog(I18n.class); + protected boolean pushed; protected String name; @@ -122,7 +125,7 @@ public class I18n extends Component { /** * Name of ressource bundle to use (eg foo/bar/customBundle) - * @a2.tagattribute required="true" default="String" + * @s.tagattribute required="true" default="String" */ public void setName(String name) { this.name = name; diff --git a/core/src/main/java/org/apache/struts2/components/If.java b/core/src/main/java/org/apache/struts2/components/If.java index 5796335ee..8b16f974f 100644 --- a/core/src/main/java/org/apache/struts2/components/If.java +++ b/core/src/main/java/org/apache/struts2/components/If.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.components; -import java.io.Writer; - import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.Writer; + /** * * @@ -43,22 +43,22 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- *  <a:if test="%{false}">
+ *  <s:if test="%{false}">
  *	    <div>Will Not Be Executed</div>
- *  </a:if>
- * 	<a:elseif test="%{true}">
+ *  </s:if>
+ * 	<s:elseif test="%{true}">
  *	    <div>Will Be Executed</div>
- *  </a:elseif>
- *  <a:else>
+ *  <s:else>
+ *  </s:elseif>
  *	    <div>Will Not Be Executed</div>
- *  </a:else>
+ *  </s:else>
  * 
  * 
* * @see Else * @see ElseIf * - * @a2.tag name="if" tld-body-content="JSP" description="If tag" tld-tag-class="org.apache.struts2.views.jsp.IfTag" + * @s.tag name="if" tld-body-content="JSP" description="If tag" tld-tag-class="org.apache.struts2.views.jsp.IfTag" */ public class If extends Component { public static final String ANSWER = "struts.if.answer"; @@ -68,7 +68,7 @@ public class If extends Component { /** * Expression to determine if body of tag is to be displayed - * @a2.tagattribute required="true" type="Boolean" + * @s.tagattribute required="true" type="Boolean" */ public void setTest(String test) { this.test = test; @@ -84,13 +84,12 @@ public class If extends Component { if (answer == null) { answer = Boolean.FALSE; } - stack.getContext().put(ANSWER, answer); return answer.booleanValue(); } public boolean end(Writer writer, String body) { - + stack.getContext().put(ANSWER, answer); return super.end(writer, body); } } diff --git a/core/src/main/java/org/apache/struts2/components/Include.java b/core/src/main/java/org/apache/struts2/components/Include.java index b0a487060..8a08eee0b 100644 --- a/core/src/main/java/org/apache/struts2/components/Include.java +++ b/core/src/main/java/org/apache/struts2/components/Include.java @@ -17,17 +17,14 @@ */ package org.apache.struts2.components; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.Writer; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Stack; -import java.util.StringTokenizer; +import org.apache.struts2.config.Settings; +import org.apache.struts2.util.FastByteArrayOutputStream; +import org.apache.struts2.RequestUtils; +import org.apache.struts2.StrutsConstants; +import com.opensymphony.xwork2.util.OgnlValueStack; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; @@ -36,15 +33,12 @@ import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.RequestUtils; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.config.Settings; -import org.apache.struts2.util.FastByteArrayOutputStream; - -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.Writer; +import java.net.URLEncoder; +import java.util.*; /** * @@ -63,19 +57,19 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * <-- One: -->
- * <a:include value="myJsp.jsp" />
+ * <s:include value="myJsp.jsp" />
  *
  * <-- Two: -->
- * <a:include value="myJsp.jsp">
- *    <a:param name="param1" value="value2" />
- *    <a:param name="param2" value="value2" />
- * </a:include>
+ * <s:include value="myJsp.jsp">
+ *    <s:param name="param1" value="value2" />
+ *    <s:param name="param2" value="value2" />
+ * </s:include>
  *
  * <-- Three: -->
- * <a:include value="myJsp.jsp">
- *    <a:param name="param1">value1</a:param>
- *    <a:param name="param2">value2<a:param>
- * </a:include>
+ * <s:include value="myJsp.jsp">
+ *    <s:param name="param1">value1</s:param>
+ *    <s:param name="param2">value2<s:param>
+ * </s:include>
  * 
  *
  * 
@@ -85,7 +79,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack;
  * 
  * 
* - * @a2.tag name="include" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.IncludeTag" + * @s.tag name="include" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.IncludeTag" * description="Include a servlet's output (result of servlet or a JSP page)" */ public class Include extends Component { @@ -156,7 +150,7 @@ public class Include extends Component { /** * The jsp/servlet output to include - * @a2.tagattribute required="true" type="String" + * @s.tagattribute required="true" type="String" */ public void setValue(String value) { this.value = value; diff --git a/core/src/main/java/org/apache/struts2/components/IteratorComponent.java b/core/src/main/java/org/apache/struts2/components/IteratorComponent.java index 0724769e3..a240dc027 100644 --- a/core/src/main/java/org/apache/struts2/components/IteratorComponent.java +++ b/core/src/main/java/org/apache/struts2/components/IteratorComponent.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.components; -import java.io.Writer; -import java.util.Iterator; - import org.apache.struts2.util.MakeIterator; import org.apache.struts2.views.jsp.IteratorStatus; - import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.Writer; +import java.util.Iterator; + /** * * @@ -50,15 +49,15 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * *

The following example retrieves the value of the getDays() method of the current object on the value stack and - * uses it to iterate over. The <a:property/> tag prints out the current value of the iterator.

+ * uses it to iterate over. The <s:property/> tag prints out the current value of the iterator.

* * * *
  * 
- * <a:iterator value="days">
- *   <p>day is: <a:property/></p>
- * </a:iterator>
+ * <s:iterator value="days">
+ *   <p>day is: <s:property/></p>
+ * </s:iterator>
  * 
  * 
* @@ -76,26 +75,26 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * 
- * <a:bean name="org.apache.struts2.example.IteratorExample" id="it">
- *   <a:param name="day" value="'foo'"/>
- *   <a:param name="day" value="'bar'"/>
- * </a:bean>
+ * <s:bean name="org.apache.struts2.example.IteratorExample" id="it">
+ *   <s:param name="day" value="'foo'"/>
+ *   <s:param name="day" value="'bar'"/>
+ * </s:bean>
  * 

* <table border="0" cellspacing="0" cellpadding="1"> * <tr> * <th>Days of the week</th> * </tr> *

- * <a:iterator value="#it.days" status="rowstatus"> + * <s:iterator value="#it.days" status="rowstatus"> * <tr> - * <a:if test="#rowstatus.odd == true"> - * <td style="background: grey"><a:property/></td> - * </a:if> - * <a:else> - * <td><a:property/></td> - * </a:else> + * <s:if test="#rowstatus.odd == true"> + * <td style="background: grey"><s:property/></td> + * </s:if> + * <s:else> + * <td><s:property/></td> + * </s:else> * </tr> - * </a:iterator> + * </s:iterator> * </table> * * @@ -112,17 +111,17 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *

  * 
  * 
- * 	<saf:iterator value="groupDao.groups" status="groupStatus">
- * 		<tr class="<saf:if test="#groupStatus.odd == true ">odd</saf:if><saf:else>even</saf:else>">
- * 			<td><saf:property value="name" /></td>
- * 			<td><saf:property value="description" /></td>
+ * 	<s:iterator value="groupDao.groups" status="groupStatus">
+ * 		<tr class="<s:if test="#groupStatus.odd == true ">odd</s:if><s:else>even</s:else>">
+ * 			<td><s:property value="name" /></td>
+ * 			<td><s:property value="description" /></td>
  * 			<td>
- * 				<saf:iterator value="users" status="userStatus">
- * 					<saf:property value="fullName" /><saf:if test="!#userStatus.last">,</saf:if>
- * 				</saf:iterator>
+ * 				<s:iterator value="users" status="userStatus">
+ * 					<s:property value="fullName" /><s:if test="!#userStatus.last">,</s:if>
+ * 				</s:iterator>
  * 			</td>
  * 		</tr>
- * 	</saf:iterator>
+ * 	</s:iterator>
  * 
  * 
  * 
@@ -132,7 +131,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *

The next example iterates over a an action collection and passes every iterator value to another action. The * trick here lies in the use of the '[0]' operator. It takes the current iterator value and passes it on to the edit - * action. Using the '[0]' operator has the same effect as using >a:property />. (The latter, however, does not + * action. Using the '[0]' operator has the same effect as using >s:property />. (The latter, however, does not * work from inside the param tag).

* * @@ -140,16 +139,16 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * 
- * 		<a:action name="entries" id="entries"/>
- * 		<a:iterator value="#entries.entries" >
- * 			<a:property value="name" />
- * 			<a:property />
- * 			<a:push value="...">
- * 				<a:action name="edit" id="edit" >
- * 					<a:param name="entry" value="[0]" />
- * 				</a:action>
+ * 		<s:action name="entries" id="entries"/>
+ * 		<s:iterator value="#entries.entries" >
+ * 			<s:property value="name" />
+ * 			<s:property />
+ * 			<s:push value="...">
+ * 				<s:action name="edit" id="edit" >
+ * 					<s:param name="entry" value="[0]" />
+ * 				</s:action>
  * 			</push>
- * 		</a:iterator>
+ * 		</s:iterator>
  * 
  * 
  * 
@@ -164,19 +163,19 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * 
- * <a:iterator status="stat" value="{1,2,3,4,5}" >
+ * <s:iterator status="stat" value="{1,2,3,4,5}" >
  *    <!-- grab the index (start with 0 ... ) -->
- *    <a:property value="#stat.index" />
+ *    <s:property value="#stat.index" />
  *    
  *    <!-- grab the top of the stack which should be the -->
  *    <!-- current iteration value (0, 1, ... 5) -->
- *    <a:property value="top" />
- * </a:iterator>
+ *    <s:property value="top" />
+ * </s:iterator>
  * 
  * 
  * 
* - * @a2.tag name="iterator" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.IteratorTag" + * @s.tag name="iterator" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.IteratorTag" * description="Iterate over a iterable value" */ public class IteratorComponent extends Component { @@ -273,7 +272,7 @@ public class IteratorComponent extends Component { /** * if specified, an instanceof IteratorStatus will be pushed into stack upon each iteration - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setStatus(String status) { this.statusAttr = status; @@ -281,7 +280,7 @@ public class IteratorComponent extends Component { /** * the iteratable source to iterate over, else an the object itself will be put into a newly created List - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setValue(String value) { this.value = value; diff --git a/core/src/main/java/org/apache/struts2/components/Label.java b/core/src/main/java/org/apache/struts2/components/Label.java index 6cd744a77..3e3563f0c 100644 --- a/core/src/main/java/org/apache/struts2/components/Label.java +++ b/core/src/main/java/org/apache/struts2/components/Label.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Renders an HTML LABEL that will allow you to output label:name combination that has the same format treatment as @@ -37,11 +37,11 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:label label="%{text('user_name')}" name="userName" />
+ * <s:label label="%{text('user_name')}" name="userName" />
  * 
  * 
* - * @a2.tag name="label" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.LabelTag" + * @s.tag name="label" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.LabelTag" * description="Render a label that displays read-only information" */ public class Label extends UIBean { @@ -79,7 +79,7 @@ public class Label extends UIBean { /** * HTML for attribute - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setFor(String forAttr) { this.forAttr = forAttr; diff --git a/core/src/main/java/org/apache/struts2/components/ListUIBean.java b/core/src/main/java/org/apache/struts2/components/ListUIBean.java index bc21770e8..cd9d53adb 100644 --- a/core/src/main/java/org/apache/struts2/components/ListUIBean.java +++ b/core/src/main/java/org/apache/struts2/components/ListUIBean.java @@ -17,17 +17,15 @@ */ package org.apache.struts2.components; -import java.lang.reflect.Array; -import java.util.Collection; -import java.util.Map; +import org.apache.struts2.util.ContainUtil; +import org.apache.struts2.util.MakeIterator; +import com.opensymphony.xwork2.util.OgnlValueStack; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import org.apache.struts2.util.ContainUtil; -import org.apache.struts2.util.MakeIterator; - -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.lang.reflect.Array; +import java.util.Collection; +import java.util.Map; /** * DoubleListUIBean is the standard superclass of all Struts list handling components. @@ -120,7 +118,7 @@ public abstract class ListUIBean extends UIBean { /** * 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. - * @a2.tagattribute required="true" + * @s.tagattribute required="true" */ public void setList(Object list) { this.list = list; @@ -128,7 +126,7 @@ public abstract class ListUIBean extends UIBean { /** * Property of list objects to get field value from - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setListKey(String listKey) { this.listKey = listKey; @@ -136,7 +134,7 @@ public abstract class ListUIBean extends UIBean { /** * Property of list objects to get field content from - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setListValue(String listValue) { this.listValue = listValue; diff --git a/core/src/main/java/org/apache/struts2/components/MergeIterator.java b/core/src/main/java/org/apache/struts2/components/MergeIterator.java index b7f9ba797..be6e77b94 100644 --- a/core/src/main/java/org/apache/struts2/components/MergeIterator.java +++ b/core/src/main/java/org/apache/struts2/components/MergeIterator.java @@ -24,10 +24,10 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.apache.struts2.components.Param.UnnamedParametric; import org.apache.struts2.util.MakeIterator; import org.apache.struts2.util.MergeIteratorFilter; - import com.opensymphony.xwork2.util.OgnlValueStack; /** @@ -105,14 +105,14 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * - * <a:merge id="myMergedIterator1"> - * <a:param value="%{myList1}" /> - * <a:param value="%{myList2}" /> - * <a:param value="%{myList3}" /> - * </a:merge> - * <a:iterator value="%{#myMergedIterator1}"> - * <a:property /> - * </a:iterator> + * <s:merge id="myMergedIterator1"> + * <s:param value="%{myList1}" /> + * <s:param value="%{myList2}" /> + * <s:param value="%{myList3}" /> + * </s:merge> + * <s:iterator value="%{#myMergedIterator1}"> + * <s:property /> + * </s:iterator> * * * @@ -122,7 +122,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * @see org.apache.struts2.util.MergeIteratorFilter * @see org.apache.struts2.views.jsp.iterator.MergeIteratorTag * - * @a2.tag name="merge" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.iterator.MergeIteratorTag" + * @s.tag name="merge" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.iterator.MergeIteratorTag" * description="Merge the values of a list of iterators into one iterator" */ public class MergeIterator extends Component implements UnnamedParametric { @@ -169,7 +169,7 @@ public class MergeIterator extends Component implements UnnamedParametric { /** * the id where the resultant merged iterator will be stored in the stack's context - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setId(String id) { super.setId(id); diff --git a/core/src/main/java/org/apache/struts2/components/OptGroup.java b/core/src/main/java/org/apache/struts2/components/OptGroup.java index ea7b5abc4..2da32f8a6 100644 --- a/core/src/main/java/org/apache/struts2/components/OptGroup.java +++ b/core/src/main/java/org/apache/struts2/components/OptGroup.java @@ -49,20 +49,20 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  *
- * <ww:select label="My Selection"
+ * <s:select label="My Selection"
  *            name="mySelection"
  *            value="%{'POPEYE'}"
  *            list="%{#{'SUPERMAN':'Superman', 'SPIDERMAN':'spiderman'}}">
- *    <ww:optgroup label="Adult"
+ *    <s:optgroup label="Adult"
  *                 list="%{#{'SOUTH_PARK':'South Park'}}" />
- *    <ww:optgroup label="Japanese"
+ *    <s:optgroup label="Japanese"
  *                 list="%{#{'POKEMON':'pokemon','DIGIMON':'digimon','SAILORMOON':'Sailormoon'}}" />
- * </ww:select>
+ * </s:select>
  *
  * 
  * 
* - * @a2.tag name="optgroup" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.OptGroupTag" + * @s.tag name="optgroup" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.OptGroupTag" * description="Renders a Select Tag's OptGroup Tag" */ public class OptGroup extends Component { @@ -109,7 +109,7 @@ public class OptGroup extends Component { /** * Set the label attribute. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setLabel(String label) { internalUiBean.setLabel(label); @@ -117,7 +117,7 @@ public class OptGroup extends Component { /** * Set the disable attribute. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDisabled(String disabled) { internalUiBean.setDisabled(disabled); @@ -125,7 +125,7 @@ public class OptGroup extends Component { /** * Set the list attribute. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setList(String list) { internalUiBean.setList(list); @@ -133,7 +133,7 @@ public class OptGroup extends Component { /** * Set the listKey attribute. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setListKey(String listKey) { internalUiBean.setListKey(listKey); @@ -141,7 +141,7 @@ public class OptGroup extends Component { /** * Set the listValue attribute. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setListValue(String listValue) { internalUiBean.setListValue(listValue); diff --git a/core/src/main/java/org/apache/struts2/components/OptionTransferSelect.java b/core/src/main/java/org/apache/struts2/components/OptionTransferSelect.java index cfcd4c63b..7358e46fa 100644 --- a/core/src/main/java/org/apache/struts2/components/OptionTransferSelect.java +++ b/core/src/main/java/org/apache/struts2/components/OptionTransferSelect.java @@ -56,7 +56,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * <-- minimum configuration --> - * <a:optiontransferselect + * <s:optiontransferselect * label="Favourite Cartoons Characters" * name="leftSideCartoonCharacters" * list="{'Popeye', 'He-Man', 'Spiderman'}" @@ -65,7 +65,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * /> * * <-- possible configuration --> - * <a:optiontransferselect + * <s:optiontransferselect * label="Favourite Cartoons Characters" * name="leftSideCartoonCharacters" * leftTitle="Left Title" @@ -86,7 +86,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
* - * @a2.tag name="optiontransferselect" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.OptionTransferSelectTag" + * @s.tag name="optiontransferselect" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.OptionTransferSelectTag" * description="Renders an input form" */ public class OptionTransferSelect extends DoubleListUIBean { @@ -302,7 +302,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * set Add To Left button label - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAddAllToLeftLabel(String addAllToLeftLabel) { this.addAllToLeftLabel = addAllToLeftLabel; @@ -314,7 +314,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * set Add All To Right button label - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAddAllToRightLabel(String addAllToRightLabel) { this.addAllToRightLabel = addAllToRightLabel; @@ -326,7 +326,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * set Add To Left button label - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAddToLeftLabel(String addToLeftLabel) { this.addToLeftLabel = addToLeftLabel; @@ -338,7 +338,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * set Add To Right button label - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAddToRightLabel(String addToRightLabel) { this.addToRightLabel = addToRightLabel; @@ -350,7 +350,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * enable Add All To Left button - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAllowAddAllToLeft(String allowAddAllToLeft) { this.allowAddAllToLeft = allowAddAllToLeft; @@ -362,7 +362,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * enable Add All To Right button - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAllowAddAllToRight(String allowAddAllToRight) { this.allowAddAllToRight = allowAddAllToRight; @@ -374,7 +374,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * enable Add To Left button - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAllowAddToLeft(String allowAddToLeft) { this.allowAddToLeft = allowAddToLeft; @@ -386,7 +386,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * enable Add To Right button - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAllowAddToRight(String allowAddToRight) { this.allowAddToRight = allowAddToRight; @@ -425,7 +425,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * set Left title - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setLeftTitle(String leftTitle) { this.leftTitle = leftTitle; @@ -437,7 +437,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * set Right title - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setRightTitle(String rightTitle) { this.rightTitle = rightTitle; @@ -446,7 +446,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * enable Select All button - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAllowSelectAll(String allowSelectAll) { this.allowSelectAll = allowSelectAll; @@ -459,7 +459,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * set Select All button label - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setSelectAllLabel(String selectAllLabel) { this.selectAllLabel = selectAllLabel; @@ -472,7 +472,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * set buttons css class - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setButtonCssClass(String buttonCssClass) { this.buttonCssClass = buttonCssClass; @@ -485,7 +485,7 @@ public class OptionTransferSelect extends DoubleListUIBean { /** * set button css style - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setButtonCssStyle(String buttonCssStyle) { this.buttonCssStyle = buttonCssStyle; diff --git a/core/src/main/java/org/apache/struts2/components/Panel.java b/core/src/main/java/org/apache/struts2/components/Panel.java index 3bb61fc1e..8b7a89f15 100644 --- a/core/src/main/java/org/apache/struts2/components/Panel.java +++ b/core/src/main/java/org/apache/struts2/components/Panel.java @@ -17,12 +17,11 @@ */ package org.apache.struts2.components; -import java.io.Writer; +import com.opensymphony.xwork2.util.OgnlValueStack; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.Writer; /** * @@ -35,7 +34,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * @see TabbedPanel * - * @a2.tag name="panel" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.PanelTag" + * @s.tag name="panel" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.PanelTag" * description="Render a panel for tabbedPanel" */ public class Panel extends Div { @@ -96,7 +95,7 @@ public class Panel extends Div { /** * The text of the tab to display in the header tab list - * @a2.tagattribute required="true" + * @s.tagattribute required="true" */ public void setTabName(String tabName) { this.tabName = tabName; @@ -104,7 +103,7 @@ public class Panel extends Div { /** * Set subscribeTopicName attribute - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setSubscribeTopicName(String subscribeTopicName) { this.subscribeTopicName = subscribeTopicName; @@ -112,7 +111,7 @@ public class Panel extends Div { /** * determines whether this is a remote panel (ajax) or a local panel (content loaded into visible/hidden containers) - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setRemote(String remote) { this.remote = remote; diff --git a/core/src/main/java/org/apache/struts2/components/Param.java b/core/src/main/java/org/apache/struts2/components/Param.java index 386ac1352..9da9f7633 100644 --- a/core/src/main/java/org/apache/struts2/components/Param.java +++ b/core/src/main/java/org/apache/struts2/components/Param.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import java.io.Writer; import org.apache.struts2.StrutsException; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * *

This tag can be used to parameterize other tags.

@@ -72,9 +72,9 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * This second example demonstrates how the text tag can use parameters from this param tag. * *
- * <a:text name="cart.total.cost">
- *     <a:param value="#session.cartTotal"/>
- * </a:text>
+ * <s:text name="cart.total.cost">
+ *     <s:param value="#session.cartTotal"/>
+ * </s:text>
  * 
* *

@@ -83,7 +83,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * @see Bean * @see Text * - * @a2.tag name="param" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ParamTag" + * @s.tag name="param" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ParamTag" * description="Parametrize other tags" */ public class Param extends Component { @@ -126,7 +126,7 @@ public class Param extends Component { /** * Name of Parameter to set - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setName(String name) { this.name = name; @@ -134,7 +134,7 @@ public class Param extends Component { /** * Value expression for Parameter to set - * @a2.tagattribute required="false" default="The value of evaluating provided name against stack" + * @s.tagattribute required="false" default="The value of evaluating provided name against stack" */ public void setValue(String value) { this.value = value; diff --git a/core/src/main/java/org/apache/struts2/components/Password.java b/core/src/main/java/org/apache/struts2/components/Password.java index dbd3b945b..6d77f3986 100644 --- a/core/src/main/java/org/apache/struts2/components/Password.java +++ b/core/src/main/java/org/apache/struts2/components/Password.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Render an HTML input tag of type password.

@@ -35,11 +35,11 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:password label="%{text('password')}" name="password" size="10" maxlength="15" />
+ * <s:password label="%{text('password')}" name="password" size="10" maxlength="15" />
  * 
  * 
* - * @a2.tag name="password" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.PasswordTag" + * @s.tag name="password" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.PasswordTag" * description="Render an HTML input tag of type password" */ public class Password extends TextField { @@ -65,7 +65,7 @@ public class Password extends TextField { /** * Whether to show input - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setShowPassword(String showPassword) { this.showPassword = showPassword; @@ -73,7 +73,7 @@ public class Password extends TextField { /** * Deprecated. Use showPassword instead. - * @a2.tagattribute required="false" rtexprvalue="true" + * @s.tagattribute required="false" rtexprvalue="true" * @deprecated use {@link #setShowPassword(String)} */ public void setShow(String showPassword) { diff --git a/core/src/main/java/org/apache/struts2/components/Property.java b/core/src/main/java/org/apache/struts2/components/Property.java index 248ba7fd3..3c5380f11 100644 --- a/core/src/main/java/org/apache/struts2/components/Property.java +++ b/core/src/main/java/org/apache/struts2/components/Property.java @@ -17,15 +17,15 @@ */ package org.apache.struts2.components; -import java.io.IOException; +import com.opensymphony.xwork2.util.OgnlValueStack; +import com.opensymphony.util.TextUtils; + import java.io.Writer; +import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.opensymphony.util.TextUtils; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * @@ -51,13 +51,13 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * 
- * 
+ * 
  *     
- *     
+ *     
  *
  *     
- *     
- * 
+ *     
+ * 
  * 
  * 
  * 
@@ -75,12 +75,12 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * 
- * <a:property value="getText('some.key')" />
+ * <s:property value="getText('some.key')" />
  * 
  * 
  * 
* - * @a2.tag name="property" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.PropertyTag" + * @s.tag name="property" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.PropertyTag" * description="Print out expression which evaluates against the stack" */ public class Property extends Component { @@ -96,7 +96,7 @@ public class Property extends Component { /** * The default value to be used if value attribute is null - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setDefault(String defaultValue) { this.defaultValue = defaultValue; @@ -104,7 +104,7 @@ public class Property extends Component { /** * Whether to escape HTML - * @a2.tagattribute required="false" type="Boolean" default="true" + * @s.tagattribute required="false" type="Boolean" default="true" */ public void setEscape(boolean escape) { this.escape = escape; @@ -112,7 +112,7 @@ public class Property extends Component { /** * value to be displayed - * @a2.tagattribute required="false" type="Object" default="<top of stack>" + * @s.tagattribute required="false" type="Object" default="<top of stack>" */ public void setValue(String value) { this.value = value; diff --git a/core/src/main/java/org/apache/struts2/components/Push.java b/core/src/main/java/org/apache/struts2/components/Push.java index c47f4084c..5146f0bf8 100644 --- a/core/src/main/java/org/apache/struts2/components/Push.java +++ b/core/src/main/java/org/apache/struts2/components/Push.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.components; -import java.io.Writer; - import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.Writer; + /** * *

Push value on stack for simplified usage.

@@ -36,10 +36,10 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *

Examples *

  * 
- * <a:push value="user">
- *     <a:propery value="firstName" />
- *     <a:propery value="lastName" />
- * </a:push>
+ * <s:push value="user">
+ *     <s:propery value="firstName" />
+ *     <s:propery value="lastName" />
+ * </s:push>
  * 
  * 
* @@ -50,11 +50,11 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- *  <a:push value="myObject">                              ----- (1)
- *       <a:bean name="jp.SomeBean" id="myBean"/>        ----- (2)
- * 		    <a:param name="myParam" value="top"/>        ----- (3)
- *       </a:bean>
- *   </a:push>
+ *  <s:push value="myObject">                              ----- (1)
+ *       <s:bean name="jp.SomeBean" id="myBean"/>        ----- (2)
+ * 		    <s:param name="myParam" value="top"/>        ----- (3)
+ *       </s:bean>
+ *   </s:push>
  * 
  * 
* @@ -68,11 +68,11 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:push value="myObject">                                       ---(A)
- *    <a:bean name="jp.SomeBean" id="myBean"/>                   ---(B)
- *       <a:param name="myParam" value="top.mySomeOtherValue"/>  ---(C)
- *    </a:bean>
- * </a:push>
+ * <s:push value="myObject">                                       ---(A)
+ *    <s:bean name="jp.SomeBean" id="myBean"/>                   ---(B)
+ *       <s:param name="myParam" value="top.mySomeOtherValue"/>  ---(C)
+ *    </s:bean>
+ * </s:push>
  * 
  * 
* @@ -86,11 +86,11 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  *        
- * <a:push value="myObject">                                 ---- (i)
- *    <a:bean name="jp.SomeBean" id="myBean"/>             ---- (ii)
- *       <a:param name="myParam" value="[1].top"/>         -----(iii)
- *    </a:bean>
- * </a:push>
+ * <s:push value="myObject">                                 ---- (i)
+ *    <s:bean name="jp.SomeBean" id="myBean"/>             ---- (ii)
+ *       <s:param name="myParam" value="[1].top"/>         -----(iii)
+ *    </s:bean>
+ * </s:push>
  * 
  * 
* @@ -102,7 +102,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * - * @a2.tag name="push" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.PushTag" + * @s.tag name="push" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.PushTag" * description="Push value on stack for simplified usage." */ public class Push extends Component { @@ -140,7 +140,7 @@ public class Push extends Component { /** * Value to push on stack - * @a2.tagattribute required="true" + * @s.tagattribute required="true" */ public void setValue(String value) { this.value = value; diff --git a/core/src/main/java/org/apache/struts2/components/Radio.java b/core/src/main/java/org/apache/struts2/components/Radio.java index e804d779c..45252b5a3 100644 --- a/core/src/main/java/org/apache/struts2/components/Radio.java +++ b/core/src/main/java/org/apache/struts2/components/Radio.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Render a radio button input field.

@@ -31,19 +31,19 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *

* * In this example, a radio control is displayed with a list of genders. The gender list is built from attribute - * id=genders. WW calls getGenders() which will return a Map. For examples using listKey and listValue attributes, + * id=genders. The framework calls getGenders() which will return a Map. For examples using listKey and listValue attributes, * see the section select tag. The default selected one will be determined (in this case) by the getMale() method * in the action class which should retun a value similar to the key of the getGenters() map if that particular * gender is to be selected.

* *

  * 
- * <a:action name="GenderMap" id="genders"/>
- * <a:radio label="Gender" name="male" list="#genders.genders"/>
+ * <s:action name="GenderMap" id="genders"/>
+ * <s:radio label="Gender" name="male" list="#genders.genders"/>
  * 
  * 
* - * @a2.tag name="radio" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.RadioTag" + * @s.tag name="radio" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.RadioTag" * description="Renders a radio button input field" */ public class Radio extends ListUIBean { diff --git a/core/src/main/java/org/apache/struts2/components/RemoteCallUIBean.java b/core/src/main/java/org/apache/struts2/components/RemoteCallUIBean.java index 75d1c6d38..efe9457ce 100644 --- a/core/src/main/java/org/apache/struts2/components/RemoteCallUIBean.java +++ b/core/src/main/java/org/apache/struts2/components/RemoteCallUIBean.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * RemoteCallUIBean is superclass for all components dealing with remote calls. * @@ -59,7 +59,7 @@ public abstract class RemoteCallUIBean extends ClosingUIBean { /** * The theme to use for the element. This tag will usually use the ajax theme. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setTheme(String theme) { super.setTheme(theme); @@ -67,7 +67,7 @@ public abstract class RemoteCallUIBean extends ClosingUIBean { /** * The URL to call to obtain the content - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setHref(String href) { this.href = href; @@ -75,7 +75,7 @@ public abstract class RemoteCallUIBean extends ClosingUIBean { /** * The text to display to the user if the is an error fetching the content - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setErrorText(String errorText) { this.errorText = errorText; @@ -83,7 +83,7 @@ public abstract class RemoteCallUIBean extends ClosingUIBean { /** * when to show the error message as content when the URL had problems - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setShowErrorTransportText(String showErrorTransportText) { this.showErrorTransportText = showErrorTransportText; @@ -91,7 +91,7 @@ public abstract class RemoteCallUIBean extends ClosingUIBean { /** * Javascript code that will be executed after the content has been fetched - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setAfterLoading(String afterLoading) { this.afterLoading = afterLoading; diff --git a/core/src/main/java/org/apache/struts2/components/Reset.java b/core/src/main/java/org/apache/struts2/components/Reset.java index 376abbc8b..3feaf62f2 100644 --- a/core/src/main/java/org/apache/struts2/components/Reset.java +++ b/core/src/main/java/org/apache/struts2/components/Reset.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Render a reset button. The reset tag is used together with the form tag to provide form resetting. @@ -38,18 +38,18 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:reset value="%{'Reset'}" />
+ * <s:reset value="%{'Reset'}" />
  * 
  * 
* *
  * 
  * Render an button reset:
- * <a:reset type="button" value="%{'Reset'}" label="Reset the form"/>
+ * <s:reset type="button" value="%{'Reset'}" label="Reset the form"/>
  * 
  * 
* - * @a2.tag name="reset" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.ResetTag" + * @s.tag name="reset" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.ResetTag" * description="Render a reset button" */ public class Reset extends FormButton { @@ -90,7 +90,7 @@ public class Reset extends FormButton { * Supply a reset button text apart from reset value. Will have no effect for input type reset, since button * text will always be the value parameter. * - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setLabel(String label) { super.setLabel(label); diff --git a/core/src/main/java/org/apache/struts2/components/Select.java b/core/src/main/java/org/apache/struts2/components/Select.java index fa504eaab..eff232c38 100644 --- a/core/src/main/java/org/apache/struts2/components/Select.java +++ b/core/src/main/java/org/apache/struts2/components/Select.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * @@ -33,7 +33,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * 
- * <a:select label="Pets"
+ * <s:select label="Pets"
  *        name="petIds"
  *        list="petDao.pets"
  *        listKey="id"
@@ -43,7 +43,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack;
  *        required="true"
  * />
  *
- * <a:select label="Months"
+ * <s:select label="Months"
  *        name="months"
  *        headerKey="-1" headerValue="Select Month"
  *        list="#{'01':'Jan', '02':'Feb', [...]}"
@@ -70,7 +70,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack;
  * 
  * 
  *
- * @a2.tag name="select" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.SelectTag"
+ * @s.tag name="select" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.SelectTag"
  * description="Render a select element"
  */
 public class Select extends ListUIBean {
@@ -113,7 +113,7 @@ public class Select extends ListUIBean {
 
     /**
      * Whether or not to add an empty (--) option after the header option
-     * @a2.tagattribute required="false" type="Boolean" default="false"
+     * @s.tagattribute required="false" type="Boolean" default="false"
      */
     public void setEmptyOption(String emptyOption) {
         this.emptyOption = emptyOption;
@@ -121,7 +121,7 @@ public class Select extends ListUIBean {
 
     /**
      * Key for first item in list. Must not be empty! "'-1'" and "''" is correct, "" is bad.
-     * @a2.tagattribute required="false"
+     * @s.tagattribute required="false"
      */
     public void setHeaderKey(String headerKey) {
         this.headerKey = headerKey;
@@ -129,7 +129,7 @@ public class Select extends ListUIBean {
 
     /**
      * Value expression for first item in list
-     * @a2.tagattribute required="false"
+     * @s.tagattribute required="false"
      */
     public void setHeaderValue(String headerValue) {
         this.headerValue = headerValue;
@@ -137,7 +137,7 @@ public class Select extends ListUIBean {
 
     /**
      * Creates a multiple select. The tag will pre-select multiple values if the values are passed as an Array (of appropriate types) via the value attribute. Passing a Collection may work too? Haven't tested this.
-     * @a2.tagattribute required="false"  type="Boolean" default="false"
+     * @s.tagattribute required="false"  type="Boolean" default="false"
      */
     public void setMultiple(String multiple) {
         this.multiple = multiple;
@@ -145,7 +145,7 @@ public class Select extends ListUIBean {
 
     /**
      * Size of the element box (# of elements to show)
-     * @a2.tagattribute required="false" type="Integer"
+     * @s.tagattribute required="false" type="Integer"
      */
     public void setSize(String size) {
         this.size = size;
diff --git a/core/src/main/java/org/apache/struts2/components/Set.java b/core/src/main/java/org/apache/struts2/components/Set.java
index e2fd88939..ed5ce6bf6 100644
--- a/core/src/main/java/org/apache/struts2/components/Set.java
+++ b/core/src/main/java/org/apache/struts2/components/Set.java
@@ -17,10 +17,10 @@
  */
 package org.apache.struts2.components;
 
-import java.io.Writer;
-
 import com.opensymphony.xwork2.util.OgnlValueStack;
 
+import java.io.Writer;
+
 /**
  * 
  * 

The set tag assigns a value to a variable in a specified scope. It is useful when you wish to assign a variable to a @@ -63,12 +63,12 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *

  * 
- * <a:set name="personName" value="person.name"/>
- * Hello, <a:property value="#personName"/>. How are you?
+ * <s:set name="personName" value="person.name"/>
+ * Hello, <s:property value="#personName"/>. How are you?
  * 
  * 
* - * @a2.tag name="set" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.SetTag" + * @s.tag name="set" tld-body-content="empty" tld-tag-class="org.apache.struts2.views.jsp.SetTag" * description="Assigns a value to a variable in a specified scope" */ public class Set extends Component { @@ -118,7 +118,7 @@ public class Set extends Component { /** * The name of the new variable that is assigned the value of value - * @a2.tagattribute required="true" type="String" + * @s.tagattribute required="true" type="String" */ public void setName(String name) { this.name = name; @@ -126,7 +126,7 @@ public class Set extends Component { /** * The scope in which to assign the variable. Can be application, session, request, page, or action. - * @a2.tagattribute required="false" type="String" default="action" + * @s.tagattribute required="false" type="String" default="action" */ public void setScope(String scope) { this.scope = scope; @@ -134,7 +134,7 @@ public class Set extends Component { /** * The value that is assigned to the variable named name - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setValue(String value) { this.value = value; diff --git a/core/src/main/java/org/apache/struts2/components/Submit.java b/core/src/main/java/org/apache/struts2/components/Submit.java index 7a052aa94..273b86184 100644 --- a/core/src/main/java/org/apache/struts2/components/Submit.java +++ b/core/src/main/java/org/apache/struts2/components/Submit.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Render a submit button. The submit tag is used together with the form tag to provide asynchronous form submissions. @@ -39,21 +39,21 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:submit value="%{'Submit'}" />
+ * <s:submit value="%{'Submit'}" />
  * 
  * 
* *
  * 
  * Render an image submit:
- * <a:submit type="image" value="%{'Submit'}" label="Submit the form" src="submit.gif"/>
+ * <s:submit type="image" value="%{'Submit'}" label="Submit the form" src="submit.gif"/>
  * 
  * 
* *
  * 
  * Render an button submit:
- * <a:submit type="button" value="%{'Submit'}" label="Submit the form"/>
+ * <s:submit type="button" value="%{'Submit'}" label="Submit the form"/>
  * 
  * 
* @@ -82,7 +82,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * Remote form replacing another div: * <div id='two' style="border: 1px solid yellow;">Initial content</div> - * <a:form + * <s:form * id='theForm2' * cssStyle="border: 1px solid green;" * action='/AjaxRemoteForm.action' @@ -90,9 +90,9 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * theme="ajax"> * * <input type='text' name='data' value='Struts User' /> - * <a:submit value="GO2" theme="ajax" resultDivId="two" /> + * <s:submit value="GO2" theme="ajax" resultDivId="two" /> * - * </a:form > + * </s:form > * *
* @@ -108,15 +108,15 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:form id="frm1" action="newPersonWithXMLResult" theme="ajax"  >
- *     <a:textfield label="Name" name="person.name" value="person.name" size="20" required="true" />
- *     <a:submit id="submitBtn" value="Save" theme="ajax"  cssClass="primary"  notifyTopics="personUpdated, systemWorking" />
- * </a:form >
+ * <s:form id="frm1" action="newPersonWithXMLResult" theme="ajax"  >
+ *     <s:textfield label="Name" name="person.name" value="person.name" size="20" required="true" />
+ *     <s:submit id="submitBtn" value="Save" theme="ajax"  cssClass="primary"  notifyTopics="personUpdated, systemWorking" />
+ * </s:form >
  * 
- * <a:div href="/listPeople.action" theme="ajax" errorText="error opps"
+ * <s:div href="/listPeople.action" theme="ajax" errorText="error opps"
  *         loadingText="loading..." id="cart-body" >
- *     <a:action namespace="" name="listPeople" executeResult="true" />
- * </a:div>
+ *     <s:action namespace="" name="listPeople" executeResult="true" />
+ * </s:div>
  * 
  * 
* @@ -150,14 +150,14 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * } * </script> * - * <a:form id="frm1" action="newPersonWithXMLResult" theme="ajax" > - * <a:textfield label="Name" name="person.name" value="person.name" size="20" required="true" /> - * <a:submit id="submitBtn" value="Save" theme="ajax" cssClass="primary" onLoadJS="doGreatThings(data, type)" /> - * </a:form> + * <s:form id="frm1" action="newPersonWithXMLResult" theme="ajax" > + * <s:textfield label="Name" name="person.name" value="person.name" size="20" required="true" /> + * <s:submit id="submitBtn" value="Save" theme="ajax" cssClass="primary" onLoadJS="doGreatThings(data, type)" /> + * </s:form> * * * - * @a2.tag name="submit" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.SubmitTag" + * @s.tag name="submit" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.SubmitTag" * description="Render a submit button" */ public class Submit extends FormButton { @@ -179,12 +179,20 @@ public class Submit extends FormButton { } public void evaluateParams() { - - if (value == null) { + if (value == null) { value = "Submit"; } + super.evaluateParams(); + } + + public void evaluateExtraParams() { + super.evaluateExtraParams(); - super.evaluateParams(); + /* if (value == null) { + value = "Submit"; + }*/ + + //super.evaluateParams(); if (null != src) { addParameter("src", findString(src)); @@ -223,7 +231,7 @@ public class Submit extends FormButton { /** * The id of the HTML element to place the result (this can the the form's id or any id on the page. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setResultDivId(String resultDivId) { this.resultDivId = resultDivId; @@ -231,7 +239,7 @@ public class Submit extends FormButton { /** * Javascript code that will be executed after the form has been submitted. The format is onLoadJS='yourMethodName(data,type)'. NOTE: the words data and type must be left like that if you want the event type and the returned data. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setOnLoadJS(String onLoadJS) { this.onLoadJS = onLoadJS; @@ -239,7 +247,7 @@ public class Submit extends FormButton { /** * Topic names to post an event to after the form has been submitted. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setNotifyTopics(String notifyTopics) { this.notifyTopics = notifyTopics; @@ -247,7 +255,7 @@ public class Submit extends FormButton { /** * Set listenTopics attribute. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setListenTopics(String listenTopics) { this.listenTopics = listenTopics; @@ -255,7 +263,7 @@ public class Submit extends FormButton { /** * Javascript code that will be executed before invokation. The format is preInvokeJS='yourMethodName(data,type)'. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setPreInvokeJS(String preInvokeJS) { this.preInvokeJS = preInvokeJS; @@ -263,7 +271,7 @@ public class Submit extends FormButton { /** * Supply a submit button text apart from submit value. Will have no effect for input type submit, since button text will always be the value parameter. For the type image, alt parameter will be set to this value. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setLabel(String label) { super.setLabel(label); @@ -271,7 +279,7 @@ public class Submit extends FormButton { /** * Supply an image src for image type submit button. Will have no effect for types input and button. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setSrc(String src) { this.src = src; diff --git a/core/src/main/java/org/apache/struts2/components/TabbedPanel.java b/core/src/main/java/org/apache/struts2/components/TabbedPanel.java index c1c93c354..583429618 100644 --- a/core/src/main/java/org/apache/struts2/components/TabbedPanel.java +++ b/core/src/main/java/org/apache/struts2/components/TabbedPanel.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.components; -import java.util.ArrayList; -import java.util.List; +import com.opensymphony.xwork2.util.OgnlValueStack; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.util.ArrayList; +import java.util.List; /** * @@ -38,24 +37,24 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:tabbedPanel id="test2" theme="simple" >
- *     <a:panel id="left" tabName="left" theme="ajax">
+ * <s:tabbedPanel id="test2" theme="simple" >
+ *     <s:panel id="left" tabName="left" theme="ajax">
  *         This is the left pane<br/>
- *         <a:form >
- *             <a:textfield name="tt" label="Test Text" />  <br/>
- *             <a:textfield name="tt2" label="Test Text2" />
- *         </a:form>
- *     </a:panel>
- *     <a:panel remote="true" href="/AjaxTest.action" id="ryh1" theme="ajax" tabName="remote one" />
- *     <a:panel id="middle" tabName="middle" theme="ajax">
+ *         <s:form >
+ *             <s:textfield name="tt" label="Test Text" />  <br/>
+ *             <s:textfield name="tt2" label="Test Text2" />
+ *         </s:form>
+ *     </s:panel>
+ *     <s:panel remote="true" href="/AjaxTest.action" id="ryh1" theme="ajax" tabName="remote one" />
+ *     <s:panel id="middle" tabName="middle" theme="ajax">
  *         middle tab<br/>
- *         <a:form >
- *             <a:textfield name="tt" label="Test Text44" />  <br/>
- *             <a:textfield name="tt2" label="Test Text442" />
- *         </a:form>
- *     </a:panel>
- *     <a:panel remote="true" href="/AjaxTest.action"  id="ryh21" theme="ajax" tabName="remote right" />
- * </a:tabbedPanel>
+ *         <s:form >
+ *             <s:textfield name="tt" label="Test Text44" />  <br/>
+ *             <s:textfield name="tt2" label="Test Text442" />
+ *         </s:form>
+ *     </s:panel>
+ *     <s:panel remote="true" href="/AjaxTest.action"  id="ryh21" theme="ajax" tabName="remote right" />
+ * </s:tabbedPanel>
  * 
  * 
* @@ -69,10 +68,10 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <link rel="stylesheet" type="text/css" href="<a:url value="/struts/tabs.css"/>">
- * <link rel="stylesheet" type="text/css" href="<a:url value="/struts/niftycorners/niftyCorners.css"/>">
- * <link rel="stylesheet" type="text/css" href="<a:url value="/struts/niftycorners/niftyPrint.css"/>" media="print">
- * <script type="text/javascript" src="<a:url value="/struts/niftycorners/nifty.js"/>"></script>
+ * <link rel="stylesheet" type="text/css" href="<s:url value="/struts/tabs.css"/>">
+ * <link rel="stylesheet" type="text/css" href="<s:url value="/struts/niftycorners/niftyCorners.css"/>">
+ * <link rel="stylesheet" type="text/css" href="<s:url value="/struts/niftycorners/niftyPrint.css"/>" media="print">
+ * <script type="text/javascript" src="<s:url value="/struts/niftycorners/nifty.js"/>"></script>
  * <script type="text/javascript">
  *     dojo.event.connect(window, "onload", function() {
  *         if (!NiftyCheck())
@@ -89,7 +88,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack;
  *
  * @see Panel
  *
- * @a2.tag name="tabbedPanel" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TabbedPanelTag"
+ * @s.tag name="tabbedPanel" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TabbedPanelTag"
  * description="Render a tabbedPanel widget."
  */
 public class TabbedPanel extends ClosingUIBean {
@@ -147,7 +146,7 @@ public class TabbedPanel extends ClosingUIBean {
 
     /**
      * The id to assign to the component.
-     * @a2.tagattribute required="true" type="String"
+     * @s.tagattribute required="true" type="String"
      */
     public void setId(String id) {
         // This is required to override tld generation attributes to required=true
diff --git a/core/src/main/java/org/apache/struts2/components/Text.java b/core/src/main/java/org/apache/struts2/components/Text.java
index b5a878ff3..c5e0cbcfc 100644
--- a/core/src/main/java/org/apache/struts2/components/Text.java
+++ b/core/src/main/java/org/apache/struts2/components/Text.java
@@ -66,7 +66,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack;
  * 
  * 
  * 
- * Accessing messages from a given bundle (the i18n Shop example bundle in the first example) and using bundle defined through ww in the second example.

+ * Accessing messages from a given bundle (the i18n Shop example bundle in the first example) and using bundle defined through the framework in the second example.

* * *
@@ -75,12 +75,17 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * <!-- First Example --> - * <a:i18n name="struts.action.test.i18n.Shop"> - * <a:text name="main.title"/> - * </a:i18n> + * <s:i18n name="struts.action.test.i18n.Shop"> + * <s:text name="main.title"/> + * </s:i18n> * * <!-- Second Example --> - * <a:text name="main.title" /> + * <s:text name="main.title" /> + * + * <!-- Third Examlpe --> + * <s:text name="i18n.label.greetings"> + * <s:param >Mr Smith</s:param> + * </s:text> * * *
@@ -89,20 +94,20 @@ import com.opensymphony.xwork2.util.OgnlValueStack; *
  * 
  * 
- * <-- Third Example -->
- * <a:text name="some.key" />
- * 
  * <-- Fourth Example -->
- * <a:text name="some.invalid.key" >
+ * <s:text name="some.key" />
+ * 
+ * <-- Fifth Example -->
+ * <s:text name="some.invalid.key" >
  *    The Default Message That Will Be Displayed
- * </a:text>
+ * </s:text>
  * 
  * 
  * 
* * @see Param * - * @a2.tag name="text" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.TextTag" + * @s.tag name="text" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.TextTag" * description="Render a I18n text message." */ public class Text extends Component implements Param.UnnamedParametric { @@ -118,7 +123,7 @@ public class Text extends Component implements Param.UnnamedParametric { /** * Name of resource property to fetch - * @a2.tagattribute required="true" + * @s.tagattribute required="true" */ public void setName(String name) { this.name = name; diff --git a/core/src/main/java/org/apache/struts2/components/TextArea.java b/core/src/main/java/org/apache/struts2/components/TextArea.java index 39307385c..3c4e996e6 100644 --- a/core/src/main/java/org/apache/struts2/components/TextArea.java +++ b/core/src/main/java/org/apache/struts2/components/TextArea.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Render HTML textarea tag.

@@ -31,13 +31,13 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:textarea label="Comments" name="comments" cols="30" rows="8"/>
+ * <s:textarea label="Comments" name="comments" cols="30" rows="8"/>
  * 
  * 
* * @see TabbedPanel * - * @a2.tag name="textarea" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TextareaTag" + * @s.tag name="textarea" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TextareaTag" * description="Render HTML textarea tag." */ public class TextArea extends UIBean { @@ -78,7 +78,7 @@ public class TextArea extends UIBean { /** * HTML cols attribute - * @a2.tagattribute required="false" type="Integer" + * @s.tagattribute required="false" type="Integer" */ public void setCols(String cols) { this.cols = cols; @@ -86,7 +86,7 @@ public class TextArea extends UIBean { /** * Whether the textarea is readonly - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setReadonly(String readonly) { this.readonly = readonly; @@ -94,7 +94,7 @@ public class TextArea extends UIBean { /** * HTML rows attribute - * @a2.tagattribute required="false" type="Integer" + * @s.tagattribute required="false" type="Integer" */ public void setRows(String rows) { this.rows = rows; @@ -102,7 +102,7 @@ public class TextArea extends UIBean { /** * HTML wrap attribute - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setWrap(String wrap) { this.wrap = wrap; diff --git a/core/src/main/java/org/apache/struts2/components/TextField.java b/core/src/main/java/org/apache/struts2/components/TextField.java index 94b3853a6..c195380ce 100644 --- a/core/src/main/java/org/apache/struts2/components/TextField.java +++ b/core/src/main/java/org/apache/struts2/components/TextField.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * Render an HTML input field of type text

@@ -35,11 +35,11 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:textfield label="%{text('user_name')}" name="user" />
+ * <s:textfield label="%{text('user_name')}" name="user" />
  * 
  * 
* - * @a2.tag name="textfield" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TextFieldTag" + * @s.tag name="textfield" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TextFieldTag" * description="Render an HTML input field of type text" */ public class TextField extends UIBean { @@ -79,7 +79,7 @@ public class TextField extends UIBean { /** * HTML maxlength attribute - * @a2.tagattribute required="false" type="Integer" + * @s.tagattribute required="false" type="Integer" */ public void setMaxlength(String maxlength) { this.maxlength = maxlength; @@ -87,7 +87,7 @@ public class TextField extends UIBean { /** * Deprecated. Use maxlength instead. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setMaxLength(String maxlength) { this.maxlength = maxlength; @@ -95,7 +95,7 @@ public class TextField extends UIBean { /** * Whether the input is readonly - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setReadonly(String readonly) { this.readonly = readonly; @@ -103,7 +103,7 @@ public class TextField extends UIBean { /** * HTML size attribute - * @a2.tagattribute required="false" type="Integer" + * @s.tagattribute required="false" type="Integer" */ public void setSize(String size) { this.size = size; diff --git a/core/src/main/java/org/apache/struts2/components/TimePicker.java b/core/src/main/java/org/apache/struts2/components/TimePicker.java index e2f295c95..f650d66c4 100644 --- a/core/src/main/java/org/apache/struts2/components/TimePicker.java +++ b/core/src/main/java/org/apache/struts2/components/TimePicker.java @@ -112,7 +112,7 @@ public class TimePicker extends TextField { /** * The format to use for time field. - * @a2.tagattribute required="false" type="String" default="Dateformat specified by language preset (%Y/%m/%d for en)" + * @s.tagattribute required="false" type="String" default="Dateformat specified by language preset (%Y/%m/%d for en)" */ public void setFormat(String format) { this.format = format; @@ -120,7 +120,7 @@ public class TimePicker extends TextField { /** * The time picker icon path - * @a2.tagattribute required="false" type="String" default="/struts/dojo/struts/widgets/dateIcon.gif" + * @s.tagattribute required="false" type="String" default="/struts/dojo/struts/widgets/dateIcon.gif" */ public void setTimeIconPath(String timeIconPath) { this.timeIconPath = timeIconPath; @@ -128,7 +128,7 @@ public class TimePicker extends TextField { /** * The time picker template path. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setTemplatePath(String templatePath) { this.templatePath = templatePath; @@ -136,7 +136,7 @@ public class TimePicker extends TextField { /** * The time picker template css path. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setTemplateCssPath(String templateCssPath) { this.templateCssPath = templateCssPath; @@ -144,7 +144,7 @@ public class TimePicker extends TextField { /** * The time picker text field size. - * @a2.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" */ public void setSize(String size) { this.size = size; diff --git a/core/src/main/java/org/apache/struts2/components/Token.java b/core/src/main/java/org/apache/struts2/components/Token.java index d08c7a3ef..df133703e 100644 --- a/core/src/main/java/org/apache/struts2/components/Token.java +++ b/core/src/main/java/org/apache/struts2/components/Token.java @@ -17,21 +17,19 @@ */ package org.apache.struts2.components; -import java.util.Map; +import org.apache.struts2.util.TokenHelper; +import com.opensymphony.xwork2.util.OgnlValueStack; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import org.apache.struts2.util.TokenHelper; - -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.util.Map; /** * * Stop double-submission of forms.

* * The token tag is used to help with the "double click" submission problem. It is needed if you are using the - * TokenInterceptor or the TokenSessionInterceptor. The a:token tag merely places a hidden element that contains + * TokenInterceptor or the TokenSessionInterceptor. The s:token tag merely places a hidden element that contains * the unique token.

* * @@ -39,14 +37,14 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * *
  * 
- * <a:token />
+ * <s:token />
  * 
  * 
* * @see org.apache.struts2.interceptor.TokenInterceptor * @see org.apache.struts2.interceptor.TokenSessionStoreInterceptor * - * @a2.tag name="token" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TokenTag" + * @s.tag name="token" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TokenTag" * description="Stop double-submission of forms" */ public class Token extends UIBean { diff --git a/core/src/main/java/org/apache/struts2/components/Tree.java b/core/src/main/java/org/apache/struts2/components/Tree.java index a030623cd..abf5659f7 100644 --- a/core/src/main/java/org/apache/struts2/components/Tree.java +++ b/core/src/main/java/org/apache/struts2/components/Tree.java @@ -17,12 +17,11 @@ */ package org.apache.struts2.components; -import java.io.Writer; +import com.opensymphony.xwork2.util.OgnlValueStack; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.Writer; /** * @@ -40,17 +39,17 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * <-- statically --> - * <saf:tree id="..." label="..."> - * <saf:treenode id="..." label="..." /> - * <saf:treenode id="..." label="..."> - * <saf:treenode id="..." label="..." /> - * <saf:treenode id="..." label="..." /> - * &;lt;/saf:treenode> - * <saf:treenode id="..." label="..." /> - * </saf:tree> + * <s:tree id="..." label="..."> + * <s:treenode id="..." label="..." /> + * <s:treenode id="..." label="..."> + * <s:treenode id="..." label="..." /> + * <s:treenode id="..." label="..." /> + * &;lt;/s:treenode> + * <s:treenode id="..." label="..." /> + * </s:tree> * * <-- dynamically --> - * <saf:tree + * <s:tree * id="..." * rootNode="..." * nodeIdProperty="..." @@ -61,7 +60,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * - * @a2.tag name="tree" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TreeTag" + * @s.tag name="tree" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TreeTag" * description="Render a tree widget." */ public class Tree extends ClosingUIBean { @@ -221,7 +220,7 @@ public class Tree extends ClosingUIBean { /** * The toggle property (either 'explode' or 'fade'). Default is 'fade'. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setToggle(String toggle) { this.toggle = toggle; @@ -233,7 +232,7 @@ public class Tree extends ClosingUIBean { /** * The treeSelectedTopic property. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setTreeSelectedTopic(String treeSelectedTopic) { this.treeSelectedTopic = treeSelectedTopic; @@ -245,7 +244,7 @@ public class Tree extends ClosingUIBean { /** * The treeExpandedTopic property. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setTreeExpandedTopic(String treeExpandedTopic) { this.treeExpandedTopic = treeExpandedTopic; @@ -257,7 +256,7 @@ public class Tree extends ClosingUIBean { /** * The treeCollapsedTopic property. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setTreeCollapsedTopic(String treeCollapsedTopic) { this.treeCollapsedTopic = treeCollapsedTopic; @@ -269,7 +268,7 @@ public class Tree extends ClosingUIBean { /** * The rootNode property. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setRootNode(String rootNode) { this.rootNodeAttr = rootNode; @@ -281,7 +280,7 @@ public class Tree extends ClosingUIBean { /** * The childCollectionProperty property. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setChildCollectionProperty(String childCollectionProperty) { this.childCollectionProperty = childCollectionProperty; @@ -293,7 +292,7 @@ public class Tree extends ClosingUIBean { /** * The nodeTitleProperty property. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setNodeTitleProperty(String nodeTitleProperty) { this.nodeTitleProperty = nodeTitleProperty; @@ -305,7 +304,7 @@ public class Tree extends ClosingUIBean { /** * The nodeIdProperty property. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setNodeIdProperty(String nodeIdProperty) { this.nodeIdProperty = nodeIdProperty; @@ -313,7 +312,7 @@ public class Tree extends ClosingUIBean { /** * The showRootGrid property (default true). - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setShowRootGrid(String showRootGrid) { this.showRootGrid = showRootGrid; @@ -329,7 +328,7 @@ public class Tree extends ClosingUIBean { /** * Blank icon image source. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setBlankIconSrc(String blankIconSrc) { this.blankIconSrc = blankIconSrc; @@ -341,7 +340,7 @@ public class Tree extends ClosingUIBean { /** * Expand icon (-) image source. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setExpandIconSrcMinus(String expandIconSrcMinus) { this.expandIconSrcMinus = expandIconSrcMinus; @@ -353,7 +352,7 @@ public class Tree extends ClosingUIBean { /** * Expand Icon (+) image source. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setExpandIconSrcPlus(String expandIconSrcPlus) { this.expandIconSrcPlus = expandIconSrcPlus; @@ -365,7 +364,7 @@ public class Tree extends ClosingUIBean { /** * Image source for under child item child icons. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setGridIconSrcC(String gridIconSrcC) { this.gridIconSrcC = gridIconSrcC; @@ -378,7 +377,7 @@ public class Tree extends ClosingUIBean { /** * Image source for last child grid. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setGridIconSrcL(String gridIconSrcL) { this.gridIconSrcL = gridIconSrcL; @@ -390,7 +389,7 @@ public class Tree extends ClosingUIBean { /** * Image source for under parent item child icons. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setGridIconSrcP(String gridIconSrcP) { this.gridIconSrcP = gridIconSrcP; @@ -402,7 +401,7 @@ public class Tree extends ClosingUIBean { /** * Image source for vertical line. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setGridIconSrcV(String gridIconSrcV) { this.gridIconSrcV = gridIconSrcV; @@ -414,7 +413,7 @@ public class Tree extends ClosingUIBean { /** * Image source for grid for sole root item. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setGridIconSrcX(String gridIconSrcX) { this.gridIconSrcX = gridIconSrcX; @@ -426,7 +425,7 @@ public class Tree extends ClosingUIBean { /** * Image source for grid for last root item. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setGridIconSrcY(String gridIconSrcY) { this.gridIconSrcY = gridIconSrcY; @@ -439,7 +438,7 @@ public class Tree extends ClosingUIBean { /** * Icon height (default 18 pixels). - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setIconHeight(String iconHeight) { this.iconHeight = iconHeight; @@ -451,7 +450,7 @@ public class Tree extends ClosingUIBean { /** * Icon width (default 19 pixels). - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setIconWidth(String iconWidth) { this.iconWidth = iconWidth; @@ -465,7 +464,7 @@ public class Tree extends ClosingUIBean { /** * Template css path (default {contextPath}/struts/tree.css. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setTemplateCssPath(String templateCssPath) { this.templateCssPath = templateCssPath; @@ -477,7 +476,7 @@ public class Tree extends ClosingUIBean { /** * Toggle duration (default 150 ms) - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setToggleDuration(String toggleDuration) { this.toggleDuration = toggleDuration; @@ -489,7 +488,7 @@ public class Tree extends ClosingUIBean { /** * Show grid (default true). - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setShowGrid(String showGrid) { this.showGrid = showGrid; diff --git a/core/src/main/java/org/apache/struts2/components/TreeNode.java b/core/src/main/java/org/apache/struts2/components/TreeNode.java index 1e8605b62..c2e4ce97a 100644 --- a/core/src/main/java/org/apache/struts2/components/TreeNode.java +++ b/core/src/main/java/org/apache/struts2/components/TreeNode.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * * @@ -52,17 +52,17 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * <-- statically --> - * <ww:tree id="..." label="..."> - * <ww:treenode id="..." label="..." /> - * <ww:treenode id="..." label="..."> - * <ww:treenode id="..." label="..." /> - * <ww:treenode id="..." label="..." /> - * &;lt;/ww:treenode> - * <ww:treenode id="..." label="..." /> - * </ww:tree> + * <s:tree id="..." label="..."> + * <s:treenode id="..." label="..." /> + * <s:treenode id="..." label="..."> + * <s:treenode id="..." label="..." /> + * <s:treenode id="..." label="..." /> + * &;lt;/s:treenode> + * <s:treenode id="..." label="..." /> + * </s:tree> * * <-- dynamically --> - * <ww:tree + * <s:tree * id="..." * rootNode="..." * nodeIdProperty="..." @@ -73,7 +73,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * - * @a2.tag name="treenode" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TreeNodeTag" + * @s.tag name="treenode" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.TreeNodeTag" * description="Render a tree node within a tree widget." */ public class TreeNode extends ClosingUIBean { @@ -94,7 +94,7 @@ public class TreeNode extends ClosingUIBean { /** * Label expression used for rendering tree node label. - * @a2.tagattribute required="true" + * @s.tagattribute required="true" */ public void setLabel(String label) { super.setLabel(label); diff --git a/core/src/main/java/org/apache/struts2/components/UIBean.java b/core/src/main/java/org/apache/struts2/components/UIBean.java index db8e3e4fe..9a7ae46c3 100644 --- a/core/src/main/java/org/apache/struts2/components/UIBean.java +++ b/core/src/main/java/org/apache/struts2/components/UIBean.java @@ -17,17 +17,6 @@ */ package org.apache.struts2.components; -import java.io.Writer; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.struts2.StrutsConstants; import org.apache.struts2.components.template.Template; import org.apache.struts2.components.template.TemplateEngine; @@ -35,9 +24,18 @@ import org.apache.struts2.components.template.TemplateEngineManager; import org.apache.struts2.components.template.TemplateRenderingContext; import org.apache.struts2.config.Settings; import org.apache.struts2.views.util.ContextUtil; - import com.opensymphony.xwork2.config.ConfigurationException; import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.Writer; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; /** * UIBean is the standard superclass of all Struts UI componentns. @@ -334,50 +332,50 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * <!-- Example 1: --> - * <a:form + * <s:form * tooltipConfig="#{'tooltipDelay':'500', * 'tooltipIcon='/myImages/myIcon.gif'}" .... > * .... - * <a:textfield label="Customer Name" tooltip="Enter the customer name" .... /> + * <s:textfield label="Customer Name" tooltip="Enter the customer name" .... /> * .... - * </a:form> + * </s:form> * * <!-- Example 2: --> - * <a:form + * <s:form * tooltipConfig="#{'tooltipDelay':'500', * 'tooltipIcon':'/myImages/myIcon.gif'}" ... > * .... - * <a:textfield label="Address" + * <s:textfield label="Address" * tooltip="Enter your address" * tooltipConfig="#{'tooltipDelay':'5000'}" /> * .... - * </a:form> + * </s:form> * * * <-- Example 3: --> - * <a:textfield + * <s:textfield * label="Customer Name" * tooltip="One of our customer Details'"> - * <a:param name="tooltipConfig"> + * <s:param name="tooltipConfig"> * tooltipDelay = 500 | * tooltipIcon = /myImages/myIcon.gif - * </a:param> - * </a:textfield> + * </s:param> + * </s:textfield> * * * <-- Example 4: --> - * <a:textfield + * <s:textfield * label="Customer Address" * tooltip="Enter The Customer Address" > - * <a:param + * <s:param * name="tooltipConfig" * value="#{'tooltipDelay':'500', * 'tooltipIcon':'/myImages/myIcon.gif'}" /> - * </a:textfield> + * </s:textfield> * * * <-- Example 5: --> - * <a:textfield + * <s:textfield * label="Customer Telephone Number" * tooltip="Enter customer Telephone Number" * tooltipConfig="#{'tooltipDelay':'500', @@ -691,18 +689,8 @@ public abstract class UIBean extends Component { final Form form = (Form) findAncestor(Form.class); - if (id != null) { - // this check is needed for backwards compatibility with 2.1.x - if (altSyntax()) { - addParameter("id", findString(id)); - } else { - addParameter("id", id); - } - } else if (form != null) { - addParameter("id", form.getParameters().get("id") + "_" + escape(name)); - } else { - addParameter("id", escape(name)); - } + // create HTML id element + populateComponentHtmlId(form); if (form != null ) { addParameter("form", form.getParameters()); @@ -817,10 +805,38 @@ public abstract class UIBean extends Component { return tooltipConfig; } + /** + * Create HTML id element for the component and populate this component parmaeter + * map. + * + * The order is as follows :- + *
    + *
  1. This component id attribute
  2. + *
  3. [containing_form_id]_[this_component_name]
  4. + *
  5. [this_component_name]
  6. + *
+ * + * @param form + */ + protected void populateComponentHtmlId(Form form) { + if (id != null) { + // this check is needed for backwards compatibility with 2.1.x + if (altSyntax()) { + addParameter("id", findString(id)); + } else { + addParameter("id", id); + } + } else if (form != null) { + addParameter("id", form.getParameters().get("id") + "_" + escape(name)); + } else { + addParameter("id", escape(name)); + } + } + /** * The template directory. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setTemplateDir(String templateDir) { this.templateDir = templateDir; @@ -828,7 +844,7 @@ public abstract class UIBean extends Component { /** * The theme (other than default) to use for rendering the element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setTheme(String theme) { this.theme = theme; @@ -840,7 +856,7 @@ public abstract class UIBean extends Component { /** * The template (other than default) to use for rendering the element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setTemplate(String template) { this.template = template; @@ -848,7 +864,7 @@ public abstract class UIBean extends Component { /** * The css class to use for element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setCssClass(String cssClass) { this.cssClass = cssClass; @@ -856,7 +872,7 @@ public abstract class UIBean extends Component { /** * The css style definitions for element ro use - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setCssStyle(String cssStyle) { this.cssStyle = cssStyle; @@ -864,7 +880,7 @@ public abstract class UIBean extends Component { /** * Set the html title attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setTitle(String title) { this.title = title; @@ -872,7 +888,7 @@ public abstract class UIBean extends Component { /** * Set the html disabled attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setDisabled(String disabled) { this.disabled = disabled; @@ -880,7 +896,7 @@ public abstract class UIBean extends Component { /** * Label expression used for rendering a element specific label - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setLabel(String label) { this.label = label; @@ -888,7 +904,7 @@ public abstract class UIBean extends Component { /** * deprecated. - * @a2.tagattribute required="false" default="left" + * @s.tagattribute required="false" default="left" * @deprecated please use {@link #setLabelposition(String)} instead */ public void setLabelPosition(String labelPosition) { @@ -897,7 +913,7 @@ public abstract class UIBean extends Component { /** * define label position of form element (top/left) - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setLabelposition(String labelPosition) { this.labelPosition = labelPosition; @@ -905,7 +921,7 @@ public abstract class UIBean extends Component { /** * define required position of required form element (left|right) - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setRequiredposition(String requiredposition) { this.requiredposition = requiredposition; @@ -913,7 +929,7 @@ public abstract class UIBean extends Component { /** * The name to set for element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setName(String name) { this.name = name; @@ -921,7 +937,7 @@ public abstract class UIBean extends Component { /** * If set to true, the rendered element will indicate that input is required - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setRequired(String required) { this.required = required; @@ -929,7 +945,7 @@ public abstract class UIBean extends Component { /** * Set the html tabindex attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setTabindex(String tabindex) { this.tabindex = tabindex; @@ -937,7 +953,7 @@ public abstract class UIBean extends Component { /** * Preset the value of input element. - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setValue(String value) { this.value = value; @@ -945,7 +961,7 @@ public abstract class UIBean extends Component { /** * Set the html onclick attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnclick(String onclick) { this.onclick = onclick; @@ -953,7 +969,7 @@ public abstract class UIBean extends Component { /** * Set the html ondblclick attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOndblclick(String ondblclick) { this.ondblclick = ondblclick; @@ -961,7 +977,7 @@ public abstract class UIBean extends Component { /** * Set the html onmousedown attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnmousedown(String onmousedown) { this.onmousedown = onmousedown; @@ -969,7 +985,7 @@ public abstract class UIBean extends Component { /** * Set the html onmouseup attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnmouseup(String onmouseup) { this.onmouseup = onmouseup; @@ -977,7 +993,7 @@ public abstract class UIBean extends Component { /** * Set the html onmouseover attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnmouseover(String onmouseover) { this.onmouseover = onmouseover; @@ -985,7 +1001,7 @@ public abstract class UIBean extends Component { /** * Set the html onmousemove attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnmousemove(String onmousemove) { this.onmousemove = onmousemove; @@ -993,7 +1009,7 @@ public abstract class UIBean extends Component { /** * Set the html onmouseout attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnmouseout(String onmouseout) { this.onmouseout = onmouseout; @@ -1001,7 +1017,7 @@ public abstract class UIBean extends Component { /** * Set the html onfocus attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnfocus(String onfocus) { this.onfocus = onfocus; @@ -1009,7 +1025,7 @@ public abstract class UIBean extends Component { /** * Set the html onblur attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnblur(String onblur) { this.onblur = onblur; @@ -1017,7 +1033,7 @@ public abstract class UIBean extends Component { /** * Set the html onkeypress attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnkeypress(String onkeypress) { this.onkeypress = onkeypress; @@ -1025,7 +1041,7 @@ public abstract class UIBean extends Component { /** * Set the html onkeydown attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnkeydown(String onkeydown) { this.onkeydown = onkeydown; @@ -1033,7 +1049,7 @@ public abstract class UIBean extends Component { /** * Set the html onkeyup attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnkeyup(String onkeyup) { this.onkeyup = onkeyup; @@ -1041,7 +1057,7 @@ public abstract class UIBean extends Component { /** * Set the html onselect attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnselect(String onselect) { this.onselect = onselect; @@ -1049,7 +1065,7 @@ public abstract class UIBean extends Component { /** * Set the html onchange attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setOnchange(String onchange) { this.onchange = onchange; @@ -1057,7 +1073,7 @@ public abstract class UIBean extends Component { /** * Set the html accesskey attribute on rendered html element - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAccesskey(String accesskey) { this.accesskey = accesskey; @@ -1065,7 +1081,7 @@ public abstract class UIBean extends Component { /** * Set the tooltip of this particular component - * @a2.tagattribute required="false" type="String" default="" + * @s.tagattribute required="false" type="String" default="" */ public void setTooltip(String tooltip) { this.tooltip = tooltip; @@ -1073,7 +1089,7 @@ public abstract class UIBean extends Component { /** * Set the tooltip configuration - * @a2.tagattribute required="false" type="String" default="" + * @s.tagattribute required="false" type="String" default="" */ public void setTooltipConfig(String tooltipConfig) { this.tooltipConfig = tooltipConfig; diff --git a/core/src/main/java/org/apache/struts2/components/URL.java b/core/src/main/java/org/apache/struts2/components/URL.java index 9b45b506e..2454bbc69 100644 --- a/core/src/main/java/org/apache/struts2/components/URL.java +++ b/core/src/main/java/org/apache/struts2/components/URL.java @@ -17,25 +17,26 @@ */ package org.apache.struts2.components; -import java.io.IOException; -import java.io.Writer; -import java.util.Iterator; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.struts2.StrutsException; -import org.apache.struts2.dispatcher.Dispatcher; import org.apache.struts2.portlet.context.PortletActionContext; import org.apache.struts2.portlet.util.PortletUrlHelper; import org.apache.struts2.views.util.UrlHelper; - -import com.opensymphony.xwork2.ActionContext; +import org.apache.struts2.dispatcher.Dispatcher; import com.opensymphony.xwork2.util.OgnlValueStack; import com.opensymphony.xwork2.util.XWorkContinuationConfig; +import com.opensymphony.xwork2.ActionContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpUtils; +import java.io.IOException; +import java.io.Writer; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; /** * @@ -80,26 +81,26 @@ import com.opensymphony.xwork2.util.XWorkContinuationConfig; * * * <-- Example 1 --> - * <a:url value="editGadget.action"> - * <a:param name="id" value="%{selected}" /> - * </a:url> + * <s:url value="editGadget.action"> + * <s:param name="id" value="%{selected}" /> + * </s:url> * * <-- Example 2 --> - * <a:url action="editGadget"> - * <a:param name="id" value="%{selected}" /> - * </a:url> + * <s:url action="editGadget"> + * <s:param name="id" value="%{selected}" /> + * </s:url> * * <-- Example 3--> - * <a:url includeParams="get" > + * <s:url includeParams="get" > * <:param name="id" value="%{'22'}" /> - * </a:url> + * </s:url> * * * * * @see Param * - * @a2.tag name="url" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.URLTag" + * @s.tag name="url" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.URLTag" * description="This tag is used to create a URL" */ public class URL extends Component { @@ -158,9 +159,10 @@ public class URL extends Component { } if (NONE.equalsIgnoreCase(includeParams)) { + mergeRequestParameters(value, parameters, Collections.EMPTY_MAP); ActionContext.getContext().put(XWorkContinuationConfig.CONTINUE_KEY, null); } else if (ALL.equalsIgnoreCase(includeParams)) { - mergeRequestParameters(parameters, req.getParameterMap()); + mergeRequestParameters(value, parameters, req.getParameterMap()); // for ALL also include GET parameters includeGetParameters(); @@ -180,10 +182,7 @@ public class URL extends Component { private void includeGetParameters() { if(!(Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest())) { String query = extractQueryString(); - if (query != null) { - //mergeRequestParameters(parameters, HttpUtils.parseQueryString(query)); - mergeRequestParameters(parameters, UrlHelper.parseQueryString(query)); - } + mergeRequestParameters(value, parameters, UrlHelper.parseQueryString(query)); } } @@ -222,7 +221,14 @@ public class URL extends Component { result = PortletUrlHelper.buildResourceUrl(value, parameters); } else { - result = UrlHelper.buildUrl(value, req, res, parameters, scheme, includeContext, encode); + String _value = value; + + // We don't include the request parameters cause they would have been + // prioritised before this [in start(Writer) method] + if (_value != null && _value.indexOf("?") > 0) { + _value = _value.substring(0, _value.indexOf("?")); + } + result = UrlHelper.buildUrl(_value, req, res, parameters, scheme, includeContext, encode); } } if ( anchor != null && anchor.length() > 0 ) { @@ -248,7 +254,7 @@ public class URL extends Component { /** * The includeParams attribute may have the value 'none', 'get' or 'all'. - * @a2.tagattribute required="false" default="get" + * @s.tagattribute required="false" default="get" */ public void setIncludeParams(String includeParams) { this.includeParams = includeParams; @@ -256,7 +262,7 @@ public class URL extends Component { /** * Set scheme attribute - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setScheme(String scheme) { this.scheme = scheme; @@ -264,7 +270,7 @@ public class URL extends Component { /** * The target value to use, if not using action - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setValue(String value) { this.value = value; @@ -272,7 +278,7 @@ public class URL extends Component { /** * The action generate url for, if not using value - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAction(String action) { this.action = action; @@ -280,7 +286,7 @@ public class URL extends Component { /** * The namespace to use - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setNamespace(String namespace) { this.namespace = namespace; @@ -288,7 +294,8 @@ public class URL extends Component { /** * The method of action to use - * @a2.tagattribute required="false" + * @s.tagattribute required="false" + * @deprecated Since Struts 2.0.0 */ public void setMethod(String method) { this.method = method; @@ -296,7 +303,7 @@ public class URL extends Component { /** * whether to encode parameters - * @a2.tagattribute required="false" type="Boolean" default="true" + * @s.tagattribute required="false" type="Boolean" default="true" */ public void setEncode(boolean encode) { this.encode = encode; @@ -304,7 +311,7 @@ public class URL extends Component { /** * whether actual context should be included in url - * @a2.tagattribute required="false" type="Boolean" default="true" + * @s.tagattribute required="false" type="Boolean" default="true" */ public void setIncludeContext(boolean includeContext) { this.includeContext = includeContext; @@ -312,7 +319,7 @@ public class URL extends Component { /** * The resulting portlet mode - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setPortletMode(String portletMode) { this.portletMode = portletMode; @@ -320,7 +327,7 @@ public class URL extends Component { /** * The resulting portlet window state - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setWindowState(String windowState) { this.windowState = windowState; @@ -328,7 +335,7 @@ public class URL extends Component { /** * Specifies if this should be a portlet render or action url - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setPortletUrlType(String portletUrlType) { this.portletUrlType = portletUrlType; @@ -336,7 +343,7 @@ public class URL extends Component { /** * The anchor for this URL - * @a2.tagattribute required="false" + * @s.tagattribute required="false" */ public void setAnchor(String anchor) { this.anchor = anchor; @@ -345,13 +352,52 @@ public class URL extends Component { /** * Merge request parameters into current parameters. If a parameter is - * already present, than the request parameter will not override its value. + * already present, than the request parameter in the current request and value atrribute + * will not override its value. * + * The priority is as follows:- + *
    + *
  • parameter from the current request (least priority)
  • + *
  • parameter form the value attribute (more priority)
  • + *
  • parameter from the param tag (most priority)
  • + *
+ * + * @param value the value attribute (url to be generated by this component) * @param parameters component parameters * @param contextParameters request parameters */ - protected void mergeRequestParameters(Map parameters, Map contextParameters){ - for (Iterator iterator = contextParameters.entrySet().iterator(); iterator.hasNext();) { + protected void mergeRequestParameters(String value, Map parameters, Map contextParameters){ + + Map mergedParams = new LinkedHashMap(contextParameters); + + // Merge contextParameters (from current request) with parameters specified in value attribute + // eg. value="someAction.action?id=someId&venue=someVenue" + // where the parameters specified in value attribute takes priority. + + if (value != null && value.trim().length() > 0 && value.indexOf("?") > 0) { + mergedParams = new LinkedHashMap(); + + String queryString = value.substring(value.indexOf("?")+1); + + mergedParams = UrlHelper.parseQueryString(queryString); + for (Iterator iterator = contextParameters.entrySet().iterator(); iterator.hasNext();) { + Map.Entry entry = (Map.Entry) iterator.next(); + Object key = entry.getKey(); + + if (!mergedParams.containsKey(key)) { + mergedParams.put(key, entry.getValue()); + } + } + } + + + // Merge parameters specified in value attribute + // eg. value="someAction.action?id=someId&venue=someVenue" + // with parameters specified though param tag + // eg. + // where parameters specified through param tag takes priority. + + for (Iterator iterator = mergedParams.entrySet().iterator(); iterator.hasNext();) { Map.Entry entry = (Map.Entry) iterator.next(); Object key = entry.getKey(); diff --git a/core/src/main/java/org/apache/struts2/components/UpDownSelect.java b/core/src/main/java/org/apache/struts2/components/UpDownSelect.java index 79355d6b4..934ab50ef 100644 --- a/core/src/main/java/org/apache/struts2/components/UpDownSelect.java +++ b/core/src/main/java/org/apache/struts2/components/UpDownSelect.java @@ -43,7 +43,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * * <!-- Example 1: simple example --> - * <a:updownselect + * <s:updownselect * list="#{'england':'England', 'america':'America', 'germany':'Germany'}" * name="prioritisedFavouriteCountries" * headerKey="-1" @@ -51,7 +51,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * emptyOption="true" /> * * <!-- Example 2: more complex example --> - * <a:updownselect + * <s:updownselect * list="defaultFavouriteCartoonCharacters" * name="prioritisedFavouriteCartoonCharacters" * headerKey="-1" @@ -69,7 +69,7 @@ import com.opensymphony.xwork2.util.OgnlValueStack; * * @version $Date$ $Id$ * - * @a2.tag name="updownselect" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.UpDownSelectTag" + * @s.tag name="updownselect" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.UpDownSelectTag" * description="Render a up down select element" */ public class UpDownSelect extends Select { @@ -148,7 +148,7 @@ public class UpDownSelect extends Select { ancestorForm.getParameters().put("updownselectIds", m); } else { - _log.warn("no ancestor form found for updownselect "+this+", therefore autoselect of all elements unpon form submission will not work "); + _log.warn("no ancestor form found for updownselect "+this+", therefore autoselect of all elements upon form submission will not work "); } } @@ -158,7 +158,7 @@ public class UpDownSelect extends Select { } /** * Whether move up button should be displayed - * @a2.tagattribute required="false" type="Boolean" default="true" + * @s.tagattribute required="false" type="Boolean" default="true" */ public void setAllowMoveUp(String allowMoveUp) { this.allowMoveUp = allowMoveUp; @@ -171,7 +171,7 @@ public class UpDownSelect extends Select { } /** * Whether move down button should be displayed - * @a2.tagattribute required="false" type="Boolean" default="true" + * @s.tagattribute required="false" type="Boolean" default="true" */ public void setAllowMoveDown(String allowMoveDown) { this.allowMoveDown = allowMoveDown; @@ -184,7 +184,7 @@ public class UpDownSelect extends Select { } /** * Whether or not select all button should be displayed - * @a2.tagattribute required="false" type="Boolean" default="true" + * @s.tagattribute required="false" type="Boolean" default="true" */ public void setAllowSelectAll(String allowSelectAll) { this.allowSelectAll = allowSelectAll; @@ -196,7 +196,7 @@ public class UpDownSelect extends Select { } /** * Text to display on the move up button - * @a2.tagattribute required="false" type="String" default="^" + * @s.tagattribute required="false" type="String" default="^" */ public void setMoveUpLabel(String moveUpLabel) { this.moveUpLabel = moveUpLabel; @@ -209,7 +209,7 @@ public class UpDownSelect extends Select { } /** * Text to display on the move down button - * @a2.tagattribute required="false" type="String" default="v" + * @s.tagattribute required="false" type="String" default="v" */ public void setMoveDownLabel(String moveDownLabel) { this.moveDownLabel = moveDownLabel; @@ -222,7 +222,7 @@ public class UpDownSelect extends Select { } /** * Text to display on the select all button - * @a2.tagattribute required="false" type="String" default="*" + * @s.tagattribute required="false" type="String" default="*" */ public void setSelectAllLabel(String selectAllLabel) { this.selectAllLabel = selectAllLabel; diff --git a/core/src/main/java/org/apache/struts2/components/table/AbstractFilterModel.java b/core/src/main/java/org/apache/struts2/components/table/AbstractFilterModel.java index e0fc5cbc9..5c097827e 100644 --- a/core/src/main/java/org/apache/struts2/components/table/AbstractFilterModel.java +++ b/core/src/main/java/org/apache/struts2/components/table/AbstractFilterModel.java @@ -17,11 +17,10 @@ */ package org.apache.struts2.components.table; -import java.util.Vector; - import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; +import java.util.Vector; /** diff --git a/core/src/main/java/org/apache/struts2/components/table/SortFilterModel.java b/core/src/main/java/org/apache/struts2/components/table/SortFilterModel.java index 235d43cb7..be82b2f0b 100644 --- a/core/src/main/java/org/apache/struts2/components/table/SortFilterModel.java +++ b/core/src/main/java/org/apache/struts2/components/table/SortFilterModel.java @@ -17,16 +17,15 @@ */ package org.apache.struts2.components.table; +import javax.swing.*; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Collections; -import javax.swing.JTable; -import javax.swing.event.TableModelEvent; -import javax.swing.event.TableModelListener; -import javax.swing.table.TableModel; - /** */ diff --git a/core/src/main/java/org/apache/struts2/components/table/WebTable.java b/core/src/main/java/org/apache/struts2/components/table/WebTable.java index fcf735201..d22cc78a1 100644 --- a/core/src/main/java/org/apache/struts2/components/table/WebTable.java +++ b/core/src/main/java/org/apache/struts2/components/table/WebTable.java @@ -17,25 +17,23 @@ */ package org.apache.struts2.components.table; +import org.apache.struts2.StrutsException; +import org.apache.struts2.components.GenericUIBean; +import org.apache.struts2.components.table.renderer.CellRenderer; +import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.swing.table.TableModel; import java.io.Writer; import java.util.ArrayList; import java.util.Iterator; import java.util.NoSuchElementException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.swing.table.TableModel; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.StrutsException; -import org.apache.struts2.components.GenericUIBean; -import org.apache.struts2.components.table.renderer.CellRenderer; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** - * @a2.tag name="table" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.table.WebTableTag" + * @s.tag name="table" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.table.WebTableTag" * description="Instantiate a JavaBean and place it in the context." */ public class WebTable extends GenericUIBean { @@ -206,7 +204,7 @@ public class WebTable extends GenericUIBean { /** * The name of model to use - * @a2.tagattribute required="true" type="String" + * @s.tagattribute required="true" type="String" */ public void setModelName(String modelName) { this.modelName = modelName; @@ -246,7 +244,7 @@ public class WebTable extends GenericUIBean { /** * Index of column to sort data by - * @a2.tagattribute required="false" type="Integer" + * @s.tagattribute required="false" type="Integer" */ public void setSortColumn(int sortColumn) { this.sortColumn = sortColumn; @@ -266,7 +264,7 @@ public class WebTable extends GenericUIBean { /** * Set sort order. Allowed values are NONE, ASC and DESC - * @a2.tagattribute required="false" type="String" default="NONE" + * @s.tagattribute required="false" type="String" default="NONE" */ public void setSortOrder(String sortOrder) { if (sortOrder.equals(SortableTableModel.NONE)) { @@ -294,7 +292,7 @@ public class WebTable extends GenericUIBean { /** * Whether the table should be sortable. Requires that model implements org.apache.struts2.components.table.SortableTableModel if set to true. - * @a2.tagattribute required="false" type="Boolean" default="false" + * @s.tagattribute required="false" type="Boolean" default="false" */ public void setSortable(boolean sortable) { sortableAttr = sortable; diff --git a/core/src/main/java/org/apache/struts2/components/table/renderer/DateCellRenderer.java b/core/src/main/java/org/apache/struts2/components/table/renderer/DateCellRenderer.java index ee7d3ca0e..ab80655bb 100644 --- a/core/src/main/java/org/apache/struts2/components/table/renderer/DateCellRenderer.java +++ b/core/src/main/java/org/apache/struts2/components/table/renderer/DateCellRenderer.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.components.table.renderer; -import java.text.SimpleDateFormat; - import org.apache.struts2.components.table.WebTable; +import java.text.SimpleDateFormat; + /** */ diff --git a/core/src/main/java/org/apache/struts2/components/table/renderer/NumericCellRenderer.java b/core/src/main/java/org/apache/struts2/components/table/renderer/NumericCellRenderer.java index 420004b35..c77e56733 100644 --- a/core/src/main/java/org/apache/struts2/components/table/renderer/NumericCellRenderer.java +++ b/core/src/main/java/org/apache/struts2/components/table/renderer/NumericCellRenderer.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.components.table.renderer; -import java.text.DecimalFormat; - import org.apache.struts2.components.table.WebTable; +import java.text.DecimalFormat; + /** */ diff --git a/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java b/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java index e4b65f1fd..89f1c9159 100644 --- a/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java +++ b/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java @@ -17,6 +17,10 @@ */ package org.apache.struts2.components.template; +import com.opensymphony.util.ClassLoaderUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -26,11 +30,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.opensymphony.util.ClassLoaderUtil; - /** * Base class for template engines. */ diff --git a/core/src/main/java/org/apache/struts2/components/template/FreemarkerTemplateEngine.java b/core/src/main/java/org/apache/struts2/components/template/FreemarkerTemplateEngine.java index bcdace221..a52e919f6 100644 --- a/core/src/main/java/org/apache/struts2/components/template/FreemarkerTemplateEngine.java +++ b/core/src/main/java/org/apache/struts2/components/template/FreemarkerTemplateEngine.java @@ -17,29 +17,26 @@ */ package org.apache.struts2.components.template; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.views.freemarker.FreemarkerManager; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.util.OgnlValueStack; +import com.opensymphony.util.ClassLoaderUtil; +import freemarker.template.Configuration; +import freemarker.template.SimpleHash; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Writer; import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.views.freemarker.FreemarkerManager; - -import com.opensymphony.util.ClassLoaderUtil; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.util.OgnlValueStack; - -import freemarker.template.Configuration; -import freemarker.template.SimpleHash; - /** * Freemarker based template engine. */ diff --git a/core/src/main/java/org/apache/struts2/components/template/JspTemplateEngine.java b/core/src/main/java/org/apache/struts2/components/template/JspTemplateEngine.java index 277bd0ed7..5db2cceab 100644 --- a/core/src/main/java/org/apache/struts2/components/template/JspTemplateEngine.java +++ b/core/src/main/java/org/apache/struts2/components/template/JspTemplateEngine.java @@ -17,19 +17,17 @@ */ package org.apache.struts2.components.template; -import java.util.Iterator; -import java.util.List; - -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.PageContext; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.struts2.ServletActionContext; import org.apache.struts2.components.Include; import org.apache.struts2.components.UIBean; - import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.http.HttpServletResponse; +import javax.servlet.jsp.PageContext; +import java.util.Iterator; +import java.util.List; /** * JSP based template engine. diff --git a/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java b/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java index e4cf9e0d6..93339e7f6 100644 --- a/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java +++ b/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.components.template; +import org.apache.struts2.config.Settings; + import java.util.HashMap; import java.util.Map; -import org.apache.struts2.config.Settings; - /** * The TemplateEngineManager will return a template engine for the template */ diff --git a/core/src/main/java/org/apache/struts2/components/template/TemplateRenderingContext.java b/core/src/main/java/org/apache/struts2/components/template/TemplateRenderingContext.java index 3a94404d7..a1d229e03 100644 --- a/core/src/main/java/org/apache/struts2/components/template/TemplateRenderingContext.java +++ b/core/src/main/java/org/apache/struts2/components/template/TemplateRenderingContext.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.components.template; +import org.apache.struts2.components.UIBean; +import com.opensymphony.xwork2.util.OgnlValueStack; + import java.io.Writer; import java.util.Map; -import org.apache.struts2.components.UIBean; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * Context used when rendering templates. */ diff --git a/core/src/main/java/org/apache/struts2/components/template/VelocityTemplateEngine.java b/core/src/main/java/org/apache/struts2/components/template/VelocityTemplateEngine.java index c9d0ae531..81d7a3921 100644 --- a/core/src/main/java/org/apache/struts2/components/template/VelocityTemplateEngine.java +++ b/core/src/main/java/org/apache/struts2/components/template/VelocityTemplateEngine.java @@ -17,23 +17,22 @@ */ package org.apache.struts2.components.template; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.views.velocity.VelocityManager; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.context.Context; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Writer; import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.views.velocity.VelocityManager; -import org.apache.velocity.app.VelocityEngine; -import org.apache.velocity.context.Context; - /** * Velocity based template engine. */ diff --git a/core/src/main/java/org/apache/struts2/config/DefaultSettings.java b/core/src/main/java/org/apache/struts2/config/DefaultSettings.java index dacb970be..5086033ba 100644 --- a/core/src/main/java/org/apache/struts2/config/DefaultSettings.java +++ b/core/src/main/java/org/apache/struts2/config/DefaultSettings.java @@ -17,16 +17,15 @@ */ package org.apache.struts2.config; +import com.opensymphony.xwork2.util.LocalizedTextUtil; +import org.apache.struts2.StrutsConstants; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.util.ArrayList; import java.util.Iterator; import java.util.StringTokenizer; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.StrutsConstants; - -import com.opensymphony.xwork2.util.LocalizedTextUtil; - /** * Default implementation of Settings - creates and delegates to other settingss by using an internal diff --git a/core/src/main/java/org/apache/struts2/config/Settings.java b/core/src/main/java/org/apache/struts2/config/Settings.java index 69f63df41..1d5132f76 100644 --- a/core/src/main/java/org/apache/struts2/config/Settings.java +++ b/core/src/main/java/org/apache/struts2/config/Settings.java @@ -17,16 +17,15 @@ */ package org.apache.struts2.config; +import com.opensymphony.xwork2.ObjectFactory; +import org.apache.struts2.StrutsConstants; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.util.Iterator; import java.util.Locale; import java.util.StringTokenizer; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.StrutsConstants; - -import com.opensymphony.xwork2.ObjectFactory; - /** * Handles all Struts config properties. Implementation of this class is pluggable (the diff --git a/core/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java b/core/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java index e332ffb8f..407ada55c 100644 --- a/core/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java +++ b/core/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.config_browser; -import java.util.Set; -import java.util.TreeSet; - -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.config.Settings; - import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.config.entities.ActionConfig; +import org.apache.struts2.config.Settings; +import org.apache.struts2.StrutsConstants; + +import java.util.Set; +import java.util.TreeSet; /** * ActionNamesAction diff --git a/core/src/main/java/org/apache/struts2/config_browser/ConfigurationHelper.java b/core/src/main/java/org/apache/struts2/config_browser/ConfigurationHelper.java index 09f0b29e7..5a6cece48 100644 --- a/core/src/main/java/org/apache/struts2/config_browser/ConfigurationHelper.java +++ b/core/src/main/java/org/apache/struts2/config_browser/ConfigurationHelper.java @@ -17,14 +17,14 @@ */ package org.apache.struts2.config_browser; +import com.opensymphony.xwork2.config.entities.ActionConfig; + import java.util.Collections; import java.util.Map; import java.util.Set; import org.apache.struts2.dispatcher.Dispatcher; -import com.opensymphony.xwork2.config.entities.ActionConfig; - /** * ConfigurationHelper */ diff --git a/core/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java b/core/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java index 8cafe365e..f0a0cb734 100644 --- a/core/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java +++ b/core/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.config_browser; -import java.util.Collections; -import java.util.List; - +import com.opensymphony.xwork2.ActionSupport; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.validator.ActionValidatorManagerFactory; import org.apache.struts2.util.ClassLoaderUtils; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionSupport; -import com.opensymphony.xwork2.validator.ActionValidatorManagerFactory; +import java.util.Collections; +import java.util.List; /** * ListValidatorsAction loads the validations for a given class and context diff --git a/core/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java b/core/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java index 94de49c80..ba8787438 100644 --- a/core/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java +++ b/core/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java @@ -17,17 +17,15 @@ */ package org.apache.struts2.config_browser; -import java.beans.PropertyDescriptor; -import java.util.Set; -import java.util.TreeSet; - +import com.opensymphony.xwork2.ObjectFactory; +import com.opensymphony.xwork2.config.entities.ActionConfig; import ognl.OgnlRuntime; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.opensymphony.xwork2.ObjectFactory; -import com.opensymphony.xwork2.config.entities.ActionConfig; +import java.beans.PropertyDescriptor; +import java.util.Set; +import java.util.TreeSet; /** * ShowConfigAction diff --git a/core/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java b/core/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java index aa5386b8c..b74eed18f 100644 --- a/core/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java +++ b/core/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java @@ -17,6 +17,13 @@ */ package org.apache.struts2.config_browser; +import com.opensymphony.xwork2.util.OgnlUtil; +import com.opensymphony.xwork2.validator.Validator; +import ognl.Ognl; +import ognl.OgnlException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; @@ -26,22 +33,11 @@ import java.util.Map; import java.util.Set; import java.util.TreeSet; -import ognl.Ognl; -import ognl.OgnlException; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.opensymphony.xwork2.util.OgnlUtil; -import com.opensymphony.xwork2.validator.Validator; - /** * ShowValidatorAction * */ public class ShowValidatorAction extends ListValidatorsAction { - private static final long serialVersionUID = 4061534149317835177L; - private static Log log = LogFactory.getLog(ShowValidatorAction.class); Set properties = Collections.EMPTY_SET; diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ActionContextCleanUp.java b/core/src/main/java/org/apache/struts2/dispatcher/ActionContextCleanUp.java index 5be0044f9..981ad8515 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/ActionContextCleanUp.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/ActionContextCleanUp.java @@ -17,22 +17,14 @@ */ package org.apache.struts2.dispatcher; -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.opensymphony.xwork2.ActionContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.opensymphony.xwork2.ActionContext; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; /** * diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ApplicationMap.java b/core/src/main/java/org/apache/struts2/dispatcher/ApplicationMap.java index 79e782f39..89e9921b7 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/ApplicationMap.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/ApplicationMap.java @@ -17,14 +17,9 @@ */ package org.apache.struts2.dispatcher; -import java.io.Serializable; -import java.util.AbstractMap; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - import javax.servlet.ServletContext; +import java.io.Serializable; +import java.util.*; /** diff --git a/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java b/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java index 91164aa29..c438d4347 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java @@ -21,7 +21,6 @@ package org.apache.struts2.dispatcher; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; - import com.opensymphony.xwork2.ActionSupport; /** diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java index 25cac5b6a..94c563aa1 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java @@ -17,55 +17,40 @@ */ package org.apache.struts2.dispatcher; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.opensymphony.util.ClassLoaderUtil; +import com.opensymphony.util.FileManager; +import com.opensymphony.xwork2.*; +import com.opensymphony.xwork2.config.ConfigurationException; +import com.opensymphony.xwork2.config.ConfigurationManager; +import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider; +import com.opensymphony.xwork2.util.*; +import com.opensymphony.xwork2.util.location.Location; +import com.opensymphony.xwork2.util.location.LocationUtils; +import freemarker.template.Template; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsConstants; import org.apache.struts2.StrutsStatics; +import org.apache.struts2.impl.StrutsObjectFactory; +import org.apache.struts2.impl.StrutsActionProxyFactory; import org.apache.struts2.config.Settings; import org.apache.struts2.config.StrutsXMLConfigurationProvider; import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.dispatcher.multipart.MultiPartRequest; import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; -import org.apache.struts2.impl.StrutsActionProxyFactory; -import org.apache.struts2.impl.StrutsObjectFactory; import org.apache.struts2.util.AttributeMap; import org.apache.struts2.util.ObjectFactoryDestroyable; import org.apache.struts2.util.ObjectFactoryInitializable; import org.apache.struts2.views.freemarker.FreemarkerManager; -import com.opensymphony.util.ClassLoaderUtil; -import com.opensymphony.util.FileManager; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.ActionProxyFactory; -import com.opensymphony.xwork2.ObjectFactory; -import com.opensymphony.xwork2.Result; -import com.opensymphony.xwork2.config.ConfigurationException; -import com.opensymphony.xwork2.config.ConfigurationManager; -import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider; -import com.opensymphony.xwork2.util.LocalizedTextUtil; -import com.opensymphony.xwork2.util.ObjectTypeDeterminer; -import com.opensymphony.xwork2.util.ObjectTypeDeterminerFactory; -import com.opensymphony.xwork2.util.OgnlValueStack; -import com.opensymphony.xwork2.util.XWorkContinuationConfig; -import com.opensymphony.xwork2.util.location.Location; -import com.opensymphony.xwork2.util.location.LocationUtils; - -import freemarker.template.Template; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.util.*; /** * A utility class the actual dispatcher delegates most of its tasks to. Each instance @@ -92,6 +77,7 @@ public class Dispatcher { private ConfigurationManager configurationManager; private boolean portletSupportActive; private boolean devMode = false; + private boolean compatibilityMode = true; // used to get WebLogic to play nice private boolean paramsWorkaroundEnabled = false; diff --git a/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java index df1035697..b58514e9c 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java @@ -107,6 +107,9 @@ import com.opensymphony.xwork2.ActionContext; * database access credentials. * *

+ * + * To use a custom {@link Dispatcher}, the createDispatcher() method could be overriden by + * the subclass. * * @see org.apache.struts2.lifecycle.LifecycleListener * @see ActionMapper @@ -154,9 +157,9 @@ public class FilterDispatcher implements Filter, StrutsStatics { packages = param + " " + packages; } this.pathPrefixes = parse(packages); - dispatcher = new Dispatcher(filterConfig.getServletContext()); + dispatcher = createDispatcher(); } - + /** * Parses the list of packages * @@ -230,7 +233,7 @@ public class FilterDispatcher implements Filter, StrutsStatics { // this is a normal request, let it pass through chain.doFilter(request, response); } - // WW did its job here + // The framework did its job here return; } @@ -365,4 +368,14 @@ public class FilterDispatcher implements Filter, StrutsStatics { return ClassLoaderUtil.getResourceAsStream(resourcePath, getClass()); } + + /** + * Create a {@link Dispatcher}, this serves as a hook for subclass to overried + * such that a custom {@link Dispatcher} could be created. + * + * @return Dispatcher + */ + protected Dispatcher createDispatcher() { + return new Dispatcher(filterConfig.getServletContext()); + } } diff --git a/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcherCompatWeblogic61.java b/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcherCompatWeblogic61.java index 9063bb903..95cc349a9 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcherCompatWeblogic61.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcherCompatWeblogic61.java @@ -17,16 +17,16 @@ */ package org.apache.struts2.dispatcher; +import org.apache.struts2.config.ServletContextSingleton; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import javax.servlet.Filter; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.config.ServletContextSingleton; - /** * When running Weblogic Server 6.1, this class should be diff --git a/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java b/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java index 2fd46744c..331ef2533 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/HttpHeaderResult.java @@ -17,20 +17,18 @@ */ package org.apache.struts2.dispatcher; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.ServletActionContext; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.Result; import com.opensymphony.xwork2.util.OgnlValueStack; import com.opensymphony.xwork2.util.TextParseUtil; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + /** * diff --git a/core/src/main/java/org/apache/struts2/dispatcher/RequestMap.java b/core/src/main/java/org/apache/struts2/dispatcher/RequestMap.java index a4183b52b..2299012e8 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/RequestMap.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/RequestMap.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.dispatcher; +import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.util.AbstractMap; import java.util.Enumeration; import java.util.HashSet; import java.util.Set; -import javax.servlet.http.HttpServletRequest; - /** * A simple implementation of the {@link java.util.Map} interface to handle a collection of request attributes. diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java b/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java index 4ff18bc58..c51ed9822 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java @@ -28,8 +28,8 @@ import org.apache.struts2.dispatcher.mapper.ActionMapperFactory; import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.views.util.UrlHelper; -import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.config.entities.ResultConfig; +import com.opensymphony.xwork2.ActionInvocation; /** * diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ServletDispatcherResult.java b/core/src/main/java/org/apache/struts2/dispatcher/ServletDispatcherResult.java index 697f3e57c..a4f980fbe 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/ServletDispatcherResult.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/ServletDispatcherResult.java @@ -17,17 +17,16 @@ */ package org.apache.struts2.dispatcher; +import org.apache.struts2.ServletActionContext; +import com.opensymphony.xwork2.ActionInvocation; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.PageContext; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; - -import com.opensymphony.xwork2.ActionInvocation; - /** * diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java b/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java index 11d97c598..309e97711 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java @@ -17,16 +17,15 @@ */ package org.apache.struts2.dispatcher; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.mapper.ActionMapperFactory; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** diff --git a/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java b/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java index 2ebdc4423..e05915f7d 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/SessionMap.java @@ -17,17 +17,10 @@ */ package org.apache.struts2.dispatcher; -import java.io.Serializable; -import java.util.AbstractMap; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +import java.io.Serializable; +import java.util.*; /** diff --git a/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java b/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java index 4107a3cf6..aedcafe63 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/StreamResult.java @@ -17,16 +17,15 @@ */ package org.apache.struts2.dispatcher; +import com.opensymphony.xwork2.ActionInvocation; + +import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; -import javax.servlet.http.HttpServletResponse; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.opensymphony.xwork2.ActionInvocation; - /** * * @@ -80,7 +79,7 @@ public class StreamResult extends StrutsResultSupport { protected static final Log log = LogFactory.getLog(StreamResult.class); protected String contentType = "text/plain"; - protected int contentLength; + protected String contentLength; protected String contentDisposition = "inline"; protected String inputName = "inputStream"; protected int bufferSize = 1024; @@ -116,14 +115,14 @@ public class StreamResult extends StrutsResultSupport { /** * @return Returns the contentLength. */ - public int getContentLength() { + public String getContentLength() { return contentLength; } /** * @param contentLength The contentLength to set. */ - public void setContentLength(int contentLength) { + public void setContentLength(String contentLength) { this.contentLength = contentLength; } @@ -155,7 +154,7 @@ public class StreamResult extends StrutsResultSupport { this.inputName = inputName; } - /* (non-Javadoc) + /** * @see org.apache.struts2.dispatcher.StrutsResultSupport#doExecute(java.lang.String, com.opensymphony.xwork2.ActionInvocation) */ protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception { @@ -181,8 +180,18 @@ public class StreamResult extends StrutsResultSupport { oResponse.setContentType(conditionalParse(contentType, invocation)); // Set the content length - if (contentLength != 0) { - oResponse.setContentLength(contentLength); + if (contentLength != null) { + String _contentLength = conditionalParse(contentLength, invocation); + int _contentLengthAsInt = -1; + try { + _contentLengthAsInt = Integer.parseInt(_contentLength); + if (_contentLengthAsInt >= 0) { + oResponse.setContentLength(_contentLengthAsInt); + } + } + catch(NumberFormatException e) { + log.warn("failed to recongnize "+_contentLength+" as a number, contentLength header will not be set", e); + } } // Set the content-disposition diff --git a/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java b/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java index 1d206631e..4b6255b61 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.dispatcher; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + /** * * diff --git a/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java b/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java index 89cc35647..08932ef46 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java @@ -23,7 +23,6 @@ import java.net.URLEncoder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.StrutsStatics; - import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.Result; import com.opensymphony.xwork2.util.TextParseUtil; diff --git a/core/src/main/java/org/apache/struts2/dispatcher/VelocityResult.java b/core/src/main/java/org/apache/struts2/dispatcher/VelocityResult.java index 0a91b737b..58a9e43f0 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/VelocityResult.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/VelocityResult.java @@ -17,8 +17,19 @@ */ package org.apache.struts2.dispatcher; -import java.io.OutputStreamWriter; -import java.io.Writer; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsConstants; +import org.apache.struts2.config.Settings; +import org.apache.struts2.views.JspSupportServlet; +import org.apache.struts2.views.velocity.VelocityManager; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.velocity.Template; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.context.Context; import javax.servlet.Servlet; import javax.servlet.ServletContext; @@ -26,21 +37,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspFactory; import javax.servlet.jsp.PageContext; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.config.Settings; -import org.apache.struts2.views.JspSupportServlet; -import org.apache.struts2.views.velocity.VelocityManager; -import org.apache.velocity.Template; -import org.apache.velocity.app.VelocityEngine; -import org.apache.velocity.context.Context; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.OutputStreamWriter; +import java.io.Writer; /** diff --git a/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapperFactory.java b/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapperFactory.java index ad3ce291e..f7fa868e2 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapperFactory.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapperFactory.java @@ -17,15 +17,15 @@ */ package org.apache.struts2.dispatcher.mapper; -import java.util.HashMap; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import org.apache.struts2.config.Settings; import org.apache.struts2.StrutsConstants; import org.apache.struts2.StrutsException; -import org.apache.struts2.config.Settings; import com.opensymphony.xwork2.ObjectFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.HashMap; /** * diff --git a/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java b/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java index 3680ddff0..ddfec6017 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.dispatcher.mapper; -import java.util.Map; - import com.opensymphony.xwork2.Result; +import java.util.Map; + /** * Simple class that holds the action mapping information used to invoke a * Struts action. The name and namespace are required, but the params map diff --git a/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java b/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java index 68ba8e24f..7519bba55 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java @@ -17,21 +17,21 @@ */ package org.apache.struts2.dispatcher.mapper; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; - import org.apache.struts2.RequestUtils; import org.apache.struts2.StrutsConstants; +import org.apache.struts2.config.Settings; import org.apache.struts2.dispatcher.ServletRedirectResult; import org.apache.struts2.util.PrefixTrie; import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.config.entities.PackageConfig; +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + /** * * @@ -149,36 +149,33 @@ public class DefaultActionMapper implements ActionMapper { static final String REDIRECT_PREFIX = "redirect:"; static final String REDIRECT_ACTION_PREFIX = "redirect-action:"; + private static boolean allowDynamicMethodCalls = "true".equals(Settings.get(StrutsConstants.STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION)); + private PrefixTrie prefixTrie = null; - private boolean compatibilityMode = false; public DefaultActionMapper() { - if (org.apache.struts2.config.Settings.isSet(StrutsConstants.STRUTS_COMPATIBILITY_MODE)) { - compatibilityMode = "true".equals(org.apache.struts2.config.Settings.get(StrutsConstants.STRUTS_COMPATIBILITY_MODE)); - } prefixTrie = new PrefixTrie() { { - if (compatibilityMode) { - put(METHOD_PREFIX, new ParameterAction() { - public void execute(String key, ActionMapping mapping) { - mapping.setMethod(key.substring(METHOD_PREFIX.length())); - } - }); - } - + put(METHOD_PREFIX, new ParameterAction() { + public void execute(String key, ActionMapping mapping) { + mapping.setMethod(key.substring(METHOD_PREFIX.length())); + } + }); + put(ACTION_PREFIX, new ParameterAction() { public void execute(String key, ActionMapping mapping) { String name = key.substring(ACTION_PREFIX.length()); - int bang = name.indexOf('!'); - if (bang != -1) { - String method = name.substring(bang + 1); - mapping.setMethod(method); - name = name.substring(0, bang); + if (allowDynamicMethodCalls) { + int bang = name.indexOf('!'); + if (bang != -1) { + String method = name.substring(bang + 1); + mapping.setMethod(method); + name = name.substring(0, bang); + } } - mapping.setName(name); } }); - + put(REDIRECT_PREFIX, new ParameterAction() { public void execute(String key, ActionMapping mapping) { ServletRedirectResult redirect = new ServletRedirectResult(); @@ -218,7 +215,7 @@ public class DefaultActionMapper implements ActionMapper { return null; } - if (compatibilityMode) { + if (allowDynamicMethodCalls) { // handle "name!method" convention. String name = mapping.getName(); int exclamation = name.lastIndexOf("!"); @@ -227,6 +224,7 @@ public class DefaultActionMapper implements ActionMapper { mapping.setMethod(name.substring(exclamation + 1)); } } + return mapping; } @@ -373,18 +371,13 @@ public class DefaultActionMapper implements ActionMapper { } uri.append(name); - if (compatibilityMode) { - if (null != mapping.getMethod() && !"".equals(mapping.getMethod())) { - uri.append("!").append(mapping.getMethod()); - } + if (null != mapping.getMethod() && !"".equals(mapping.getMethod())) { + uri.append("!").append(mapping.getMethod()); } String extension = getDefaultExtension(); if ( extension != null) { - - // When in compatibility mode, we don't add an extension if it exists already - // otherwise, we always add it - if (!compatibilityMode || (compatibilityMode && uri.indexOf( '.' + extension) == -1 )) { + if (uri.indexOf( '.' + extension) == -1 ) { uri.append(".").append(extension); if ( params.length() > 0) { uri.append(params); diff --git a/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java b/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java index 3c57b0661..269abd3c1 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java @@ -17,20 +17,20 @@ */ package org.apache.struts2.dispatcher.mapper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.struts2.RequestUtils; + +import com.opensymphony.xwork2.config.Configuration; + +import javax.servlet.http.HttpServletRequest; import java.net.URLDecoder; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.StringTokenizer; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.RequestUtils; - -import com.opensymphony.xwork2.config.Configuration; - /** * A custom action mapper using the following format: *

diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java index 4cb541e6d..12af2232c 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java @@ -17,24 +17,16 @@ */ package org.apache.struts2.dispatcher.multipart; +import org.apache.commons.fileupload.*; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.disk.DiskFileItem; + +import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.RequestContext; -import org.apache.commons.fileupload.disk.DiskFileItem; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; +import java.util.*; /** * Multipart form data request adapter for Jakarta Commons Fileupload package. diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java index 3b754cb51..502c153a8 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/MultiPartRequestWrapper.java @@ -17,25 +17,18 @@ */ package org.apache.struts2.dispatcher.multipart; +import org.apache.struts2.config.Settings; +import org.apache.struts2.dispatcher.StrutsRequestWrapper; +import org.apache.struts2.StrutsConstants; +import org.apache.struts2.util.ClassLoaderUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.http.HttpServletRequest; import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Vector; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.config.Settings; -import org.apache.struts2.dispatcher.StrutsRequestWrapper; -import org.apache.struts2.util.ClassLoaderUtils; +import java.util.*; /** diff --git a/core/src/main/java/org/apache/struts2/impl/ActionContextImpl.java b/core/src/main/java/org/apache/struts2/impl/ActionContextImpl.java index bc61e0414..10b2655ed 100644 --- a/core/src/main/java/org/apache/struts2/impl/ActionContextImpl.java +++ b/core/src/main/java/org/apache/struts2/impl/ActionContextImpl.java @@ -2,14 +2,13 @@ package org.apache.struts2.impl; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; - +import com.opensymphony.xwork2.ActionInvocation; import org.apache.struts2.spi.ActionContext; import org.apache.struts2.spi.Result; -import com.opensymphony.xwork2.ActionInvocation; +import java.lang.reflect.Method; +import java.util.List; +import java.util.ArrayList; public class ActionContextImpl implements ActionContext { diff --git a/core/src/main/java/org/apache/struts2/impl/InterceptorAdapter.java b/core/src/main/java/org/apache/struts2/impl/InterceptorAdapter.java index 68e3d57ec..a6274ce5e 100644 --- a/core/src/main/java/org/apache/struts2/impl/InterceptorAdapter.java +++ b/core/src/main/java/org/apache/struts2/impl/InterceptorAdapter.java @@ -3,15 +3,13 @@ package org.apache.struts2.impl; import static org.apache.struts2.impl.RequestContextImpl.ILLEGAL_PROCEED; +import com.opensymphony.xwork2.interceptor.Interceptor; +import com.opensymphony.xwork2.ActionInvocation; import java.util.concurrent.Callable; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.interceptor.Interceptor; - public class InterceptorAdapter implements Interceptor { - private static final long serialVersionUID = 8020658947818231684L; final org.apache.struts2.spi.Interceptor delegate; public InterceptorAdapter(org.apache.struts2.spi.Interceptor delegate) { diff --git a/core/src/main/java/org/apache/struts2/impl/MessagesImpl.java b/core/src/main/java/org/apache/struts2/impl/MessagesImpl.java index 32a759e37..d358ca841 100644 --- a/core/src/main/java/org/apache/struts2/impl/MessagesImpl.java +++ b/core/src/main/java/org/apache/struts2/impl/MessagesImpl.java @@ -2,19 +2,11 @@ package org.apache.struts2.impl; -import java.util.ArrayList; -import java.util.Collections; -import java.util.EnumMap; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - +import com.opensymphony.xwork2.TextProvider; +import com.opensymphony.xwork2.DefaultTextProvider; import org.apache.struts2.Messages; -import com.opensymphony.xwork2.DefaultTextProvider; -import com.opensymphony.xwork2.TextProvider; +import java.util.*; public class MessagesImpl implements Messages { diff --git a/core/src/main/java/org/apache/struts2/impl/RequestContextImpl.java b/core/src/main/java/org/apache/struts2/impl/RequestContextImpl.java index 1d853806e..08e9c42b6 100644 --- a/core/src/main/java/org/apache/struts2/impl/RequestContextImpl.java +++ b/core/src/main/java/org/apache/struts2/impl/RequestContextImpl.java @@ -2,28 +2,23 @@ package org.apache.struts2.impl; -import static org.apache.struts2.StrutsStatics.HTTP_REQUEST; -import static org.apache.struts2.StrutsStatics.HTTP_RESPONSE; -import static org.apache.struts2.StrutsStatics.SERVLET_CONTEXT; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.concurrent.Callable; - -import javax.servlet.ServletContext; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.opensymphony.xwork2.ActionInvocation; import org.apache.struts2.Messages; +import static org.apache.struts2.StrutsStatics.*; import org.apache.struts2.dispatcher.RequestMap; import org.apache.struts2.spi.ActionContext; import org.apache.struts2.spi.RequestContext; import org.apache.struts2.spi.ValueStack; -import com.opensymphony.xwork2.ActionInvocation; +import javax.servlet.ServletContext; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.concurrent.Callable; public class RequestContextImpl implements RequestContext { diff --git a/core/src/main/java/org/apache/struts2/impl/ResultAdapter.java b/core/src/main/java/org/apache/struts2/impl/ResultAdapter.java index f71c8f32f..5cbbd12ce 100644 --- a/core/src/main/java/org/apache/struts2/impl/ResultAdapter.java +++ b/core/src/main/java/org/apache/struts2/impl/ResultAdapter.java @@ -2,12 +2,11 @@ package org.apache.struts2.impl; -import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.Result; +import com.opensymphony.xwork2.ActionInvocation; public class ResultAdapter implements Result { - private static final long serialVersionUID = -5107033078266553554L; final org.apache.struts2.spi.Result delegate; public ResultAdapter(org.apache.struts2.spi.Result delegate) { diff --git a/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java b/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java index f13340531..3c5eb6aff 100644 --- a/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java +++ b/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java @@ -2,17 +2,15 @@ package org.apache.struts2.impl; +import com.opensymphony.xwork2.DefaultActionProxy; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.config.Configuration; + import java.util.Map; import java.util.concurrent.Callable; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.DefaultActionProxy; -import com.opensymphony.xwork2.config.Configuration; - public class StrutsActionProxy extends DefaultActionProxy { - private static final long serialVersionUID = -2434901249671934080L; - public StrutsActionProxy(Configuration cfg, String namespace, String actionName, Map extraContext, boolean executeResult, boolean cleanupContext) throws Exception { super(cfg, namespace, actionName, extraContext, executeResult, cleanupContext); diff --git a/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java b/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java index c55e5fd14..3231b767b 100644 --- a/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java +++ b/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java @@ -2,12 +2,12 @@ package org.apache.struts2.impl; -import java.util.Map; - import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.DefaultActionProxyFactory; import com.opensymphony.xwork2.config.Configuration; +import java.util.Map; + public class StrutsActionProxyFactory extends DefaultActionProxyFactory { public ActionProxy createActionProxy(Configuration config, String namespace, String actionName, Map extraContext) diff --git a/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java b/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java index dda52dfd6..efd385b4e 100644 --- a/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java +++ b/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java @@ -2,16 +2,16 @@ package org.apache.struts2.impl; -import java.util.HashMap; -import java.util.Map; - import com.opensymphony.xwork2.ObjectFactory; import com.opensymphony.xwork2.Result; -import com.opensymphony.xwork2.config.ConfigurationException; +import com.opensymphony.xwork2.util.OgnlUtil; import com.opensymphony.xwork2.config.entities.InterceptorConfig; import com.opensymphony.xwork2.config.entities.ResultConfig; +import com.opensymphony.xwork2.config.ConfigurationException; import com.opensymphony.xwork2.interceptor.Interceptor; -import com.opensymphony.xwork2.util.OgnlUtil; + +import java.util.Map; +import java.util.HashMap; public class StrutsObjectFactory extends ObjectFactory { diff --git a/core/src/main/java/org/apache/struts2/impl/ValueStackAdapter.java b/core/src/main/java/org/apache/struts2/impl/ValueStackAdapter.java index aa168b14c..c2f389e4c 100644 --- a/core/src/main/java/org/apache/struts2/impl/ValueStackAdapter.java +++ b/core/src/main/java/org/apache/struts2/impl/ValueStackAdapter.java @@ -2,11 +2,10 @@ package org.apache.struts2.impl; -import java.util.Iterator; - +import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.struts2.spi.ValueStack; -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.util.Iterator; public class ValueStackAdapter implements ValueStack { diff --git a/core/src/main/java/org/apache/struts2/interceptor/BackgroundProcess.java b/core/src/main/java/org/apache/struts2/interceptor/BackgroundProcess.java index ba82b1719..a64f5753f 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/BackgroundProcess.java +++ b/core/src/main/java/org/apache/struts2/interceptor/BackgroundProcess.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.interceptor; -import java.io.Serializable; - import com.opensymphony.xwork2.ActionInvocation; +import java.io.Serializable; + /** * Background thread to be executed by the ExecuteAndWaitInterceptor. * diff --git a/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java index 173b4a3b9..74b4d34ce 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java @@ -19,8 +19,8 @@ package org.apache.struts2.interceptor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; +import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; @@ -29,7 +29,7 @@ import com.opensymphony.xwork2.interceptor.AbstractInterceptor; * * This interceptor creates the HttpSession. *

- * This is particular usefull when using the <@ww.tokten> tag in freemarker templates. + * This is particular usefull when using the <@s.token> tag in freemarker templates. * The tag do require that a HttpSession is already created since freemarker commits * the response to the client immediately. * diff --git a/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java index 692ab4ebb..9ed4a87f6 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java @@ -110,7 +110,7 @@ import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; * <result name="success">longRunningAction-success.jsp</result> * </action> * - * <%@ taglib prefix="ww" uri="/struts" %> + * <%@ taglib prefix="s" uri="/struts" %> * <html> * <head> * <title>Please wait</title> diff --git a/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java b/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java index e513071be..a43b65ed0 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java +++ b/core/src/main/java/org/apache/struts2/interceptor/PrincipalProxy.java @@ -17,9 +17,8 @@ */ package org.apache.struts2.interceptor; -import java.security.Principal; - import javax.servlet.http.HttpServletRequest; +import java.security.Principal; /** * Proxy class used together with PrincipalAware interface. It allows to get indirect access to diff --git a/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java index c5a68588a..5adc49f77 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java @@ -17,21 +17,20 @@ */ package org.apache.struts2.interceptor; -import java.util.IdentityHashMap; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsException; -import org.apache.struts2.dispatcher.SessionMap; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.opensymphony.xwork2.interceptor.PreResultListener; import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.struts2.dispatcher.SessionMap; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.IdentityHashMap; +import java.util.Map; /** * diff --git a/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java index 96b1039ba..689e9a8c6 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java @@ -19,17 +19,16 @@ package org.apache.struts2.interceptor; import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.StrutsStatics; import org.apache.struts2.util.ServletContextAware; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.ServletContext; + /** * diff --git a/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java index 515c08388..8149cc8c9 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java @@ -20,7 +20,6 @@ package org.apache.struts2.interceptor; import java.util.Map; import org.apache.struts2.util.TokenHelper; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ValidationAware; diff --git a/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java index 21d375766..c10c84224 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java @@ -17,19 +17,17 @@ */ package org.apache.struts2.interceptor; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; - import org.apache.struts2.ServletActionContext; import org.apache.struts2.util.InvocationSessionStore; import org.apache.struts2.util.TokenHelper; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.Result; import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + /** * diff --git a/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java index 94108130f..74e1c7d50 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java @@ -17,6 +17,17 @@ */ package org.apache.struts2.interceptor.debugging; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.interceptor.Interceptor; +import com.opensymphony.xwork2.interceptor.PreResultListener; +import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.views.freemarker.FreemarkerResult; + +import javax.servlet.http.HttpServletResponse; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; @@ -25,25 +36,7 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.lang.reflect.Array; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.views.freemarker.FreemarkerResult; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.interceptor.Interceptor; -import com.opensymphony.xwork2.interceptor.PreResultListener; -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.util.*; /** * Provides several different debugging screens to provide insight into the diff --git a/core/src/main/java/org/apache/struts2/jsf/FacesInterceptor.java b/core/src/main/java/org/apache/struts2/jsf/FacesInterceptor.java index e086260ec..9539956f9 100644 --- a/core/src/main/java/org/apache/struts2/jsf/FacesInterceptor.java +++ b/core/src/main/java/org/apache/struts2/jsf/FacesInterceptor.java @@ -19,8 +19,12 @@ package org.apache.struts2.jsf; import javax.faces.context.FacesContext; +import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.Result; +import com.opensymphony.xwork2.config.entities.ActionConfig; +import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.interceptor.Interceptor; /** diff --git a/core/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java b/core/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java index 5f53fdbfc..9329d615b 100644 --- a/core/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java +++ b/core/src/main/java/org/apache/struts2/jsf/StrutsNavigationHandler.java @@ -19,6 +19,7 @@ package org.apache.struts2.jsf; import java.util.Map; +import javax.faces.FactoryFinder; import javax.faces.application.NavigationHandler; import javax.faces.context.FacesContext; diff --git a/core/src/main/java/org/apache/struts2/plexus/PlexusFilter.java b/core/src/main/java/org/apache/struts2/plexus/PlexusFilter.java index fb4e060d2..2dc86966f 100644 --- a/core/src/main/java/org/apache/struts2/plexus/PlexusFilter.java +++ b/core/src/main/java/org/apache/struts2/plexus/PlexusFilter.java @@ -17,23 +17,16 @@ */ package org.apache.struts2.plexus; -import java.io.IOException; -import java.util.Collections; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codehaus.plexus.PlexusContainer; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.util.Collections; + /** * Creates a plexus container for the application, session, and request */ diff --git a/core/src/main/java/org/apache/struts2/plexus/PlexusLifecycleListener.java b/core/src/main/java/org/apache/struts2/plexus/PlexusLifecycleListener.java index 90aea4cb9..3e1f30e8f 100644 --- a/core/src/main/java/org/apache/struts2/plexus/PlexusLifecycleListener.java +++ b/core/src/main/java/org/apache/struts2/plexus/PlexusLifecycleListener.java @@ -17,7 +17,10 @@ */ package org.apache.struts2.plexus; -import java.util.Collections; +import org.codehaus.plexus.DefaultPlexusContainer; +import org.codehaus.plexus.PlexusContainer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; @@ -25,11 +28,7 @@ import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codehaus.plexus.DefaultPlexusContainer; -import org.codehaus.plexus.PlexusContainer; +import java.util.Collections; /** * Manages the Plexus lifecycle for the servlet and session contexts diff --git a/core/src/main/java/org/apache/struts2/plexus/PlexusObjectFactory.java b/core/src/main/java/org/apache/struts2/plexus/PlexusObjectFactory.java index 3fc478f52..732358f59 100644 --- a/core/src/main/java/org/apache/struts2/plexus/PlexusObjectFactory.java +++ b/core/src/main/java/org/apache/struts2/plexus/PlexusObjectFactory.java @@ -17,16 +17,6 @@ */ package org.apache.struts2.plexus; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.ServletContext; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.util.ObjectFactoryInitializable; -import org.codehaus.plexus.PlexusContainer; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ObjectFactory; import com.opensymphony.xwork2.Result; @@ -37,6 +27,14 @@ import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.interceptor.Interceptor; import com.opensymphony.xwork2.util.OgnlUtil; import com.opensymphony.xwork2.validator.Validator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.struts2.util.ObjectFactoryInitializable; +import org.codehaus.plexus.PlexusContainer; + +import javax.servlet.ServletContext; +import java.util.HashMap; +import java.util.Map; /** * Plexus integartion. You need three optional files: plexus-request.xml, plexus-session.xml, and diff --git a/core/src/main/java/org/apache/struts2/plexus/PlexusUtils.java b/core/src/main/java/org/apache/struts2/plexus/PlexusUtils.java index 45d3629cb..3ebc96c34 100644 --- a/core/src/main/java/org/apache/struts2/plexus/PlexusUtils.java +++ b/core/src/main/java/org/apache/struts2/plexus/PlexusUtils.java @@ -17,14 +17,14 @@ */ package org.apache.struts2.plexus; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.io.InputStreamReader; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.configuration.PlexusConfigurationResourceException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.ByteArrayInputStream; /** * Utility methods for dealing with Plexus diff --git a/core/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java b/core/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java index f53756c6e..a09f7738d 100644 --- a/core/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java +++ b/core/src/main/java/org/apache/struts2/portlet/PortletApplicationMap.java @@ -33,9 +33,7 @@ import javax.portlet.PortletContext; */ public class PortletApplicationMap extends AbstractMap implements Serializable { - private static final long serialVersionUID = 2296107511063504414L; - - private PortletContext context; + private PortletContext context; private Set entries; diff --git a/core/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java b/core/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java index 86870b409..8eb8da4db 100644 --- a/core/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java +++ b/core/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java @@ -28,7 +28,6 @@ import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import org.apache.struts2.portlet.PortletActionConstants; - import com.opensymphony.xwork2.ActionContext; diff --git a/core/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java b/core/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java index 181229de0..d0c19a6d3 100644 --- a/core/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java +++ b/core/src/main/java/org/apache/struts2/portlet/context/PreparatorServlet.java @@ -27,8 +27,8 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.struts2.StrutsStatics; +import org.apache.struts2.StrutsStatics; import com.opensymphony.xwork2.ActionContext; /** diff --git a/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java b/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java index 53dac0f7e..12f770f43 100644 --- a/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java +++ b/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java @@ -60,6 +60,7 @@ import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.ActionProxyFactory; import com.opensymphony.xwork2.ObjectFactory; import com.opensymphony.xwork2.config.ConfigurationException; +import com.opensymphony.xwork2.config.ConfigurationManager; import com.opensymphony.xwork2.util.LocalizedTextUtil; import com.opensymphony.xwork2.util.OgnlValueStack; diff --git a/core/src/main/java/org/apache/struts2/portlet/result/PortletResult.java b/core/src/main/java/org/apache/struts2/portlet/result/PortletResult.java index b316c6e90..29aacfc0d 100644 --- a/core/src/main/java/org/apache/struts2/portlet/result/PortletResult.java +++ b/core/src/main/java/org/apache/struts2/portlet/result/PortletResult.java @@ -34,11 +34,11 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.StrutsResultSupport; import org.apache.struts2.portlet.PortletActionConstants; import org.apache.struts2.portlet.context.PortletActionContext; - import com.opensymphony.xwork2.ActionInvocation; /** diff --git a/core/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java b/core/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java index ef3cab94a..43fc4190f 100644 --- a/core/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java +++ b/core/src/main/java/org/apache/struts2/portlet/result/PortletVelocityResult.java @@ -17,9 +17,23 @@ */ package org.apache.struts2.portlet.result; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsConstants; +import org.apache.struts2.config.Settings; +import org.apache.struts2.dispatcher.StrutsResultSupport; +import org.apache.struts2.portlet.PortletActionConstants; +import org.apache.struts2.portlet.context.PortletActionContext; +import org.apache.struts2.views.JspSupportServlet; +import org.apache.struts2.views.velocity.VelocityManager; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.util.OgnlValueStack; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.velocity.Template; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.context.Context; import javax.portlet.ActionResponse; import javax.portlet.PortletException; @@ -31,23 +45,9 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspFactory; import javax.servlet.jsp.PageContext; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.config.Settings; -import org.apache.struts2.dispatcher.StrutsResultSupport; -import org.apache.struts2.portlet.PortletActionConstants; -import org.apache.struts2.portlet.context.PortletActionContext; -import org.apache.struts2.views.JspSupportServlet; -import org.apache.struts2.views.velocity.VelocityManager; -import org.apache.velocity.Template; -import org.apache.velocity.app.VelocityEngine; -import org.apache.velocity.context.Context; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; /** * diff --git a/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java b/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java index 54fa1d815..f84574180 100644 --- a/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java +++ b/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java @@ -17,7 +17,6 @@ */ package org.apache.struts2.portlet.util; -import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Iterator; @@ -34,7 +33,6 @@ import javax.portlet.WindowState; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.struts2.StrutsException; import org.apache.struts2.portlet.PortletActionConstants; import org.apache.struts2.portlet.context.PortletActionContext; @@ -49,7 +47,6 @@ import org.apache.struts2.portlet.context.PortletActionContext; public class PortletUrlHelper { private static final Log LOG = LogFactory.getLog(PortletUrlHelper.class); - public static final String ENCODING = "UTF-8"; /** * Create a portlet URL with for the specified action and namespace. * @@ -196,18 +193,14 @@ public class PortletUrlHelper { if(params != null && params.size() > 0) { sb.append("?"); Iterator it = params.keySet().iterator(); - try { - while(it.hasNext()) { - String key = (String)it.next(); - String val = (String)params.get(key); - sb.append(URLEncoder.encode(key, ENCODING)).append("="); - sb.append(URLEncoder.encode(val, ENCODING)); - if(it.hasNext()) { - sb.append("&"); - } + while(it.hasNext()) { + String key = (String)it.next(); + String val = (String)params.get(key); + sb.append(URLEncoder.encode(key)).append("="); + sb.append(URLEncoder.encode(val)); + if(it.hasNext()) { + sb.append("&"); } - } catch (UnsupportedEncodingException e) { - throw new StrutsException(ENCODING + " encoding not supported"); } } RenderResponse resp = PortletActionContext.getRenderResponse(); diff --git a/core/src/main/java/org/apache/struts2/quickstart/Configuration.java b/core/src/main/java/org/apache/struts2/quickstart/Configuration.java index 2ce54cf44..3227fca24 100644 --- a/core/src/main/java/org/apache/struts2/quickstart/Configuration.java +++ b/core/src/main/java/org/apache/struts2/quickstart/Configuration.java @@ -17,26 +17,20 @@ */ package org.apache.struts2.quickstart; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.io.Serializable; +import com.thoughtworks.xstream.XStream; +import org.apache.commons.collections.MultiHashMap; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; +import org.w3c.dom.Element; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.DocumentBuilder; +import java.io.*; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.apache.commons.collections.MultiHashMap; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.thoughtworks.xstream.XStream; - /** * Configuration for the QuickStart program. */ diff --git a/core/src/main/java/org/apache/struts2/quickstart/JettyServer.java b/core/src/main/java/org/apache/struts2/quickstart/JettyServer.java index 3f19c84ad..507631df2 100644 --- a/core/src/main/java/org/apache/struts2/quickstart/JettyServer.java +++ b/core/src/main/java/org/apache/struts2/quickstart/JettyServer.java @@ -17,14 +17,14 @@ */ package org.apache.struts2.quickstart; -import java.io.File; -import java.util.List; -import java.util.Map; - import org.mortbay.http.SocketListener; import org.mortbay.jetty.Server; import org.mortbay.jetty.servlet.WebApplicationContext; +import java.util.List; +import java.util.Map; +import java.io.File; + /** * To start a Jetty server used by the QuickStart application. */ diff --git a/core/src/main/java/org/apache/struts2/quickstart/MultiDirClassLoader.java b/core/src/main/java/org/apache/struts2/quickstart/MultiDirClassLoader.java index 98f709ed5..236f42a05 100644 --- a/core/src/main/java/org/apache/struts2/quickstart/MultiDirClassLoader.java +++ b/core/src/main/java/org/apache/struts2/quickstart/MultiDirClassLoader.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.quickstart; -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; import java.net.URLClassLoader; +import java.net.URL; +import java.net.MalformedURLException; +import java.io.File; import java.util.ArrayList; /** diff --git a/core/src/main/java/org/apache/struts2/quickstart/MultiDirResource.java b/core/src/main/java/org/apache/struts2/quickstart/MultiDirResource.java index d2c871017..1d12313b9 100644 --- a/core/src/main/java/org/apache/struts2/quickstart/MultiDirResource.java +++ b/core/src/main/java/org/apache/struts2/quickstart/MultiDirResource.java @@ -17,22 +17,13 @@ */ package org.apache.struts2.quickstart; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - import org.mortbay.util.Resource; +import java.io.*; +import java.util.*; +import java.net.URL; +import java.net.MalformedURLException; + /** */ public class MultiDirResource extends Resource { diff --git a/core/src/main/java/org/apache/struts2/quickstart/MultiWebApplicationContext.java b/core/src/main/java/org/apache/struts2/quickstart/MultiWebApplicationContext.java index d262b0ced..824cab24a 100644 --- a/core/src/main/java/org/apache/struts2/quickstart/MultiWebApplicationContext.java +++ b/core/src/main/java/org/apache/struts2/quickstart/MultiWebApplicationContext.java @@ -17,18 +17,18 @@ */ package org.apache.struts2.quickstart; -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.List; -import java.util.Map; - import org.mortbay.jetty.servlet.WebApplicationContext; -import org.mortbay.util.FileResource; -import org.mortbay.util.JarResource; import org.mortbay.util.Resource; +import org.mortbay.util.JarResource; +import org.mortbay.util.FileResource; + +import java.io.IOException; +import java.io.File; +import java.net.URLClassLoader; +import java.net.URL; +import java.lang.reflect.Constructor; +import java.util.Map; +import java.util.List; /** */ diff --git a/core/src/main/java/org/apache/struts2/quickstart/QuickStart.java b/core/src/main/java/org/apache/struts2/quickstart/QuickStart.java index 7196dde19..335b1899a 100644 --- a/core/src/main/java/org/apache/struts2/quickstart/QuickStart.java +++ b/core/src/main/java/org/apache/struts2/quickstart/QuickStart.java @@ -17,24 +17,20 @@ */ package org.apache.struts2.quickstart; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - import org.apache.struts2.util.classloader.CompilingClassLoader; - import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; +import java.io.File; +import java.io.FileReader; +import java.io.FileNotFoundException; +import java.net.URL; +import java.net.URLClassLoader; +import java.net.MalformedURLException; +import java.util.*; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; + /** * The QuickStart main program. * diff --git a/core/src/main/java/org/apache/struts2/sitegraph/SiteGraph.java b/core/src/main/java/org/apache/struts2/sitegraph/SiteGraph.java index 0daf7c871..0c1dd9169 100644 --- a/core/src/main/java/org/apache/struts2/sitegraph/SiteGraph.java +++ b/core/src/main/java/org/apache/struts2/sitegraph/SiteGraph.java @@ -3,16 +3,12 @@ */ package org.apache.struts2.sitegraph; -import java.io.ByteArrayOutputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.Writer; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.struts2.StrutsException; import org.apache.struts2.sitegraph.renderers.DOTRenderer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.*; /** * // START SNIPPET: javadocs-intro diff --git a/core/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java b/core/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java index 6035d4d06..a9f73ad16 100644 --- a/core/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java +++ b/core/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java @@ -3,6 +3,19 @@ */ package org.apache.struts2.sitegraph; +import com.opensymphony.xwork2.config.ConfigurationManager; +import com.opensymphony.xwork2.config.ConfigurationProvider; +import com.opensymphony.xwork2.config.entities.ActionConfig; +import com.opensymphony.xwork2.config.entities.ResultConfig; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.struts2.config.StrutsXMLConfigurationProvider; +import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.sitegraph.entities.FreeMarkerView; +import org.apache.struts2.sitegraph.entities.JspView; +import org.apache.struts2.sitegraph.entities.VelocityView; +import org.apache.struts2.sitegraph.entities.View; + import java.io.File; import java.io.IOException; import java.util.Collections; @@ -10,19 +23,6 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.config.StrutsXMLConfigurationProvider; -import org.apache.struts2.sitegraph.entities.FreeMarkerView; -import org.apache.struts2.sitegraph.entities.JspView; -import org.apache.struts2.sitegraph.entities.VelocityView; -import org.apache.struts2.sitegraph.entities.View; - -import com.opensymphony.xwork2.config.ConfigurationManager; -import com.opensymphony.xwork2.config.ConfigurationProvider; -import com.opensymphony.xwork2.config.entities.ActionConfig; -import com.opensymphony.xwork2.config.entities.ResultConfig; - /** * Initializes and retrieves XWork config elements */ diff --git a/core/src/main/java/org/apache/struts2/sitegraph/entities/FileBasedView.java b/core/src/main/java/org/apache/struts2/sitegraph/entities/FileBasedView.java index 9086d7dd1..4894fd5d5 100644 --- a/core/src/main/java/org/apache/struts2/sitegraph/entities/FileBasedView.java +++ b/core/src/main/java/org/apache/struts2/sitegraph/entities/FileBasedView.java @@ -17,18 +17,17 @@ */ package org.apache.struts2.sitegraph.entities; +import com.opensymphony.util.FileUtils; +import org.apache.struts2.config.Settings; +import org.apache.struts2.sitegraph.model.Link; +import org.apache.struts2.StrutsConstants; + import java.io.File; import java.util.Set; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.config.Settings; -import org.apache.struts2.sitegraph.model.Link; - -import com.opensymphony.util.FileUtils; - /** */ public abstract class FileBasedView implements View { diff --git a/core/src/main/java/org/apache/struts2/sitegraph/entities/FreeMarkerView.java b/core/src/main/java/org/apache/struts2/sitegraph/entities/FreeMarkerView.java index 47b7ffd82..c80cb2fa9 100644 --- a/core/src/main/java/org/apache/struts2/sitegraph/entities/FreeMarkerView.java +++ b/core/src/main/java/org/apache/struts2/sitegraph/entities/FreeMarkerView.java @@ -11,10 +11,10 @@ public class FreeMarkerView extends FileBasedView { } protected Pattern getActionPattern() { - return Pattern.compile("<\\@ww.action [^>]*name=\"([^\"]+)\"[^>]*>"); + return Pattern.compile("<\\@s.action [^>]*name=\"([^\"]+)\"[^>]*>"); } protected Pattern getFormPattern() { - return Pattern.compile("<\\@ww.form [^>]*action=\"([^\"]+)\"[^>]*>"); + return Pattern.compile("<\\@s.form [^>]*action=\"([^\"]+)\"[^>]*>"); } } diff --git a/core/src/main/java/org/apache/struts2/sitegraph/model/Graph.java b/core/src/main/java/org/apache/struts2/sitegraph/model/Graph.java index cd1eb1637..69445c54b 100644 --- a/core/src/main/java/org/apache/struts2/sitegraph/model/Graph.java +++ b/core/src/main/java/org/apache/struts2/sitegraph/model/Graph.java @@ -18,11 +18,7 @@ package org.apache.struts2.sitegraph.model; import java.io.IOException; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; +import java.util.*; /** */ diff --git a/core/src/main/java/org/apache/struts2/sitegraph/renderers/DOTRenderer.java b/core/src/main/java/org/apache/struts2/sitegraph/renderers/DOTRenderer.java index f9d24d465..9ead67c2e 100644 --- a/core/src/main/java/org/apache/struts2/sitegraph/renderers/DOTRenderer.java +++ b/core/src/main/java/org/apache/struts2/sitegraph/renderers/DOTRenderer.java @@ -17,33 +17,20 @@ */ package org.apache.struts2.sitegraph.renderers; -import java.io.IOException; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -import org.apache.struts2.StrutsConstants; import org.apache.struts2.config.Settings; import org.apache.struts2.sitegraph.StrutsConfigRetriever; import org.apache.struts2.sitegraph.entities.Target; import org.apache.struts2.sitegraph.entities.View; -import org.apache.struts2.sitegraph.model.ActionNode; -import org.apache.struts2.sitegraph.model.Graph; -import org.apache.struts2.sitegraph.model.IndentWriter; -import org.apache.struts2.sitegraph.model.Link; -import org.apache.struts2.sitegraph.model.SiteGraphNode; -import org.apache.struts2.sitegraph.model.SubGraph; -import org.apache.struts2.sitegraph.model.ViewNode; - +import org.apache.struts2.sitegraph.model.*; +import org.apache.struts2.StrutsConstants; import com.opensymphony.xwork2.ActionChainResult; import com.opensymphony.xwork2.config.entities.ActionConfig; import com.opensymphony.xwork2.config.entities.ResultConfig; +import java.io.IOException; +import java.io.Writer; +import java.util.*; + /** * Renders flow diagram to the console at info level */ diff --git a/core/src/main/java/org/apache/struts2/sitemesh/FreeMarkerPageFilter.java b/core/src/main/java/org/apache/struts2/sitemesh/FreeMarkerPageFilter.java index c96218e1d..e28a78406 100644 --- a/core/src/main/java/org/apache/struts2/sitemesh/FreeMarkerPageFilter.java +++ b/core/src/main/java/org/apache/struts2/sitemesh/FreeMarkerPageFilter.java @@ -17,28 +17,23 @@ */ package org.apache.struts2.sitemesh; -import java.io.IOException; -import java.util.Locale; +import com.opensymphony.module.sitemesh.Decorator; +import com.opensymphony.module.sitemesh.Page; +import com.opensymphony.module.sitemesh.HTMLPage; +import org.apache.struts2.views.freemarker.FreemarkerManager; +import com.opensymphony.xwork2.*; +import freemarker.template.Configuration; +import freemarker.template.SimpleHash; +import freemarker.template.Template; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.views.freemarker.FreemarkerManager; - -import com.opensymphony.module.sitemesh.Decorator; -import com.opensymphony.module.sitemesh.HTMLPage; -import com.opensymphony.module.sitemesh.Page; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.LocaleProvider; - -import freemarker.template.Configuration; -import freemarker.template.SimpleHash; -import freemarker.template.Template; +import java.io.IOException; +import java.util.Locale; /** * Applies FreeMarker-based sitemesh decorators. diff --git a/core/src/main/java/org/apache/struts2/sitemesh/TemplatePageFilter.java b/core/src/main/java/org/apache/struts2/sitemesh/TemplatePageFilter.java index 4a56d2078..81256bcd2 100644 --- a/core/src/main/java/org/apache/struts2/sitemesh/TemplatePageFilter.java +++ b/core/src/main/java/org/apache/struts2/sitemesh/TemplatePageFilter.java @@ -17,29 +17,24 @@ */ package org.apache.struts2.sitemesh; -import java.io.IOException; +import com.opensymphony.module.sitemesh.Decorator; +import com.opensymphony.module.sitemesh.Page; +import com.opensymphony.module.sitemesh.filter.PageFilter; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.StrutsConstants; +import org.apache.struts2.config.Settings; + +import com.opensymphony.xwork2.*; +import com.opensymphony.xwork2.interceptor.PreResultListener; +import com.opensymphony.xwork2.util.OgnlValueStack; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.config.Settings; -import org.apache.struts2.dispatcher.Dispatcher; - -import com.opensymphony.module.sitemesh.Decorator; -import com.opensymphony.module.sitemesh.Page; -import com.opensymphony.module.sitemesh.filter.PageFilter; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.ActionSupport; -import com.opensymphony.xwork2.Result; -import com.opensymphony.xwork2.interceptor.PreResultListener; -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.IOException; /** * An abstract template page filter that sets up the proper contexts for diff --git a/core/src/main/java/org/apache/struts2/sitemesh/VelocityPageFilter.java b/core/src/main/java/org/apache/struts2/sitemesh/VelocityPageFilter.java index 0272ba240..411d8e204 100644 --- a/core/src/main/java/org/apache/struts2/sitemesh/VelocityPageFilter.java +++ b/core/src/main/java/org/apache/struts2/sitemesh/VelocityPageFilter.java @@ -17,24 +17,22 @@ */ package org.apache.struts2.sitemesh; -import java.io.IOException; -import java.io.PrintWriter; +import com.opensymphony.module.sitemesh.Decorator; +import com.opensymphony.module.sitemesh.Page; +import com.opensymphony.module.sitemesh.HTMLPage; +import org.apache.struts2.views.velocity.VelocityManager; +import com.opensymphony.xwork2.ActionContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.velocity.Template; +import org.apache.velocity.context.Context; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.views.velocity.VelocityManager; -import org.apache.velocity.Template; -import org.apache.velocity.context.Context; - -import com.opensymphony.module.sitemesh.Decorator; -import com.opensymphony.module.sitemesh.HTMLPage; -import com.opensymphony.module.sitemesh.Page; -import com.opensymphony.xwork2.ActionContext; +import java.io.IOException; +import java.io.PrintWriter; /** diff --git a/core/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java b/core/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java index 45d1e4d30..6c8b13fe8 100644 --- a/core/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java +++ b/core/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java @@ -17,18 +17,17 @@ */ package org.apache.struts2.spring; -import javax.servlet.ServletContext; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.StrutsConstants; import org.apache.struts2.config.Settings; import org.apache.struts2.util.ObjectFactoryInitializable; +import org.apache.struts2.StrutsConstants; +import com.opensymphony.xwork2.spring.SpringObjectFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; -import com.opensymphony.xwork2.spring.SpringObjectFactory; +import javax.servlet.ServletContext; diff --git a/core/src/main/java/org/apache/struts2/spring/lifecycle/SpringExternalReferenceResolverSetupListener.java b/core/src/main/java/org/apache/struts2/spring/lifecycle/SpringExternalReferenceResolverSetupListener.java index b98688508..9b58850fc 100644 --- a/core/src/main/java/org/apache/struts2/spring/lifecycle/SpringExternalReferenceResolverSetupListener.java +++ b/core/src/main/java/org/apache/struts2/spring/lifecycle/SpringExternalReferenceResolverSetupListener.java @@ -17,23 +17,24 @@ */ package org.apache.struts2.spring.lifecycle; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; +import com.opensymphony.xwork2.config.Configuration; +import com.opensymphony.xwork2.config.ExternalReferenceResolver; +import com.opensymphony.xwork2.config.entities.PackageConfig; + +import org.apache.struts2.dispatcher.DispatcherListener; +import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.util.ServletContextAware; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.web.context.support.WebApplicationContextUtils; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; -import org.apache.struts2.dispatcher.Dispatcher; -import org.apache.struts2.dispatcher.DispatcherListener; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.web.context.support.WebApplicationContextUtils; - -import com.opensymphony.xwork2.config.Configuration; -import com.opensymphony.xwork2.config.ExternalReferenceResolver; -import com.opensymphony.xwork2.config.entities.PackageConfig; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; /** * Setup any {@link com.opensymphony.xwork2.config.ExternalReferenceResolver}s diff --git a/core/src/main/java/org/apache/struts2/util/AppendIteratorFilter.java b/core/src/main/java/org/apache/struts2/util/AppendIteratorFilter.java index a148e6598..645445792 100644 --- a/core/src/main/java/org/apache/struts2/util/AppendIteratorFilter.java +++ b/core/src/main/java/org/apache/struts2/util/AppendIteratorFilter.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.util; +import com.opensymphony.xwork2.Action; + import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import com.opensymphony.xwork2.Action; - /** * A bean that takes several iterators and outputs them in sequence diff --git a/core/src/main/java/org/apache/struts2/util/AttributeMap.java b/core/src/main/java/org/apache/struts2/util/AttributeMap.java index 93b04ccdf..1248b1848 100644 --- a/core/src/main/java/org/apache/struts2/util/AttributeMap.java +++ b/core/src/main/java/org/apache/struts2/util/AttributeMap.java @@ -17,15 +17,14 @@ */ package org.apache.struts2.util; +import org.apache.struts2.ServletActionContext; + +import javax.servlet.jsp.PageContext; import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.Set; -import javax.servlet.jsp.PageContext; - -import org.apache.struts2.ServletActionContext; - /** * A Map that holds 4 levels of scope. diff --git a/core/src/main/java/org/apache/struts2/util/InvocationSessionStore.java b/core/src/main/java/org/apache/struts2/util/InvocationSessionStore.java index ec85d6eef..5f1ab64c8 100644 --- a/core/src/main/java/org/apache/struts2/util/InvocationSessionStore.java +++ b/core/src/main/java/org/apache/struts2/util/InvocationSessionStore.java @@ -17,14 +17,14 @@ */ package org.apache.struts2.util; -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + /** * InvocationSessionStore diff --git a/core/src/main/java/org/apache/struts2/util/IteratorGenerator.java b/core/src/main/java/org/apache/struts2/util/IteratorGenerator.java index 6bf81d650..9d3deae9c 100644 --- a/core/src/main/java/org/apache/struts2/util/IteratorGenerator.java +++ b/core/src/main/java/org/apache/struts2/util/IteratorGenerator.java @@ -17,6 +17,8 @@ */ package org.apache.struts2.util; +import com.opensymphony.xwork2.Action; + import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -25,8 +27,6 @@ import java.util.StringTokenizer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.opensymphony.xwork2.Action; - /** * A bean that generates an iterator filled with a given object depending on the count, diff --git a/core/src/main/java/org/apache/struts2/util/MakeIterator.java b/core/src/main/java/org/apache/struts2/util/MakeIterator.java index fe59ec284..1f0c54d9f 100644 --- a/core/src/main/java/org/apache/struts2/util/MakeIterator.java +++ b/core/src/main/java/org/apache/struts2/util/MakeIterator.java @@ -18,12 +18,7 @@ package org.apache.struts2.util; import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; /** @@ -79,6 +74,7 @@ public class MakeIterator { } else if (value.getClass().isArray()) { //need ability to support primitives; therefore, cannot //use Object[] casting. + Object a = Array.newInstance(value.getClass().getComponentType(), (Array.getLength(value))); ArrayList list = new ArrayList(Array.getLength(value)); for (int j = 0; j < Array.getLength(value); j++) { diff --git a/core/src/main/java/org/apache/struts2/util/MergeIteratorFilter.java b/core/src/main/java/org/apache/struts2/util/MergeIteratorFilter.java index e46ec4685..62b9efaba 100644 --- a/core/src/main/java/org/apache/struts2/util/MergeIteratorFilter.java +++ b/core/src/main/java/org/apache/struts2/util/MergeIteratorFilter.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.util; +import com.opensymphony.xwork2.Action; + import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import com.opensymphony.xwork2.Action; - /** * A bean that takes several iterators and outputs the merge of them. Used by diff --git a/core/src/main/java/org/apache/struts2/util/ResolverSetupServletContextListener.java b/core/src/main/java/org/apache/struts2/util/ResolverSetupServletContextListener.java index 9f26f8651..1f76d80c5 100644 --- a/core/src/main/java/org/apache/struts2/util/ResolverSetupServletContextListener.java +++ b/core/src/main/java/org/apache/struts2/util/ResolverSetupServletContextListener.java @@ -17,9 +17,8 @@ */ package org.apache.struts2.util; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; +import com.opensymphony.xwork2.config.Configuration; +import com.opensymphony.xwork2.config.entities.PackageConfig; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; @@ -28,8 +27,9 @@ import javax.servlet.ServletContextListener; import org.apache.struts2.dispatcher.Dispatcher; import org.apache.struts2.dispatcher.DispatcherListener; -import com.opensymphony.xwork2.config.Configuration; -import com.opensymphony.xwork2.config.entities.PackageConfig; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; /** diff --git a/core/src/main/java/org/apache/struts2/util/SortIteratorFilter.java b/core/src/main/java/org/apache/struts2/util/SortIteratorFilter.java index 9fdf2c5a7..e333f89ab 100644 --- a/core/src/main/java/org/apache/struts2/util/SortIteratorFilter.java +++ b/core/src/main/java/org/apache/struts2/util/SortIteratorFilter.java @@ -17,15 +17,10 @@ */ package org.apache.struts2.util; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; - +import com.opensymphony.xwork2.Action; import org.apache.commons.logging.LogFactory; -import com.opensymphony.xwork2.Action; +import java.util.*; /** diff --git a/core/src/main/java/org/apache/struts2/util/Sorter.java b/core/src/main/java/org/apache/struts2/util/Sorter.java index 85d08f278..dce9c316a 100644 --- a/core/src/main/java/org/apache/struts2/util/Sorter.java +++ b/core/src/main/java/org/apache/struts2/util/Sorter.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.util; -import java.util.Comparator; - import com.opensymphony.xwork2.util.OgnlValueStack; +import java.util.Comparator; + /** * Sorters. Utility sorters for use with the "sort" tag. diff --git a/core/src/main/java/org/apache/struts2/util/StrutsTypeConverter.java b/core/src/main/java/org/apache/struts2/util/StrutsTypeConverter.java index bb16068a5..8e541a6d4 100644 --- a/core/src/main/java/org/apache/struts2/util/StrutsTypeConverter.java +++ b/core/src/main/java/org/apache/struts2/util/StrutsTypeConverter.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.util; -import java.util.Map; - import ognl.DefaultTypeConverter; +import java.util.Map; + /** * * diff --git a/core/src/main/java/org/apache/struts2/util/StrutsUtil.java b/core/src/main/java/org/apache/struts2/util/StrutsUtil.java index fcd8bc34d..cb40e3195 100644 --- a/core/src/main/java/org/apache/struts2/util/StrutsUtil.java +++ b/core/src/main/java/org/apache/struts2/util/StrutsUtil.java @@ -17,33 +17,25 @@ */ package org.apache.struts2.util; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import com.opensymphony.util.TextUtils; +import org.apache.struts2.views.jsp.ui.OgnlTool; +import org.apache.struts2.views.util.UrlHelper; +import com.opensymphony.xwork2.ObjectFactory; +import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.servlet.RequestDispatcher; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.views.jsp.ui.OgnlTool; -import org.apache.struts2.views.util.UrlHelper; - -import com.opensymphony.util.TextUtils; -import com.opensymphony.xwork2.ObjectFactory; -import com.opensymphony.xwork2.util.OgnlValueStack; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.*; /** diff --git a/core/src/main/java/org/apache/struts2/util/SubsetIteratorFilter.java b/core/src/main/java/org/apache/struts2/util/SubsetIteratorFilter.java index 5909dc168..2cd2f94d5 100644 --- a/core/src/main/java/org/apache/struts2/util/SubsetIteratorFilter.java +++ b/core/src/main/java/org/apache/struts2/util/SubsetIteratorFilter.java @@ -17,14 +17,14 @@ */ package org.apache.struts2.util; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import com.opensymphony.xwork2.Action; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.opensymphony.xwork2.Action; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; /** diff --git a/core/src/main/java/org/apache/struts2/util/TokenHelper.java b/core/src/main/java/org/apache/struts2/util/TokenHelper.java index 8094bd894..9a7ff9990 100644 --- a/core/src/main/java/org/apache/struts2/util/TokenHelper.java +++ b/core/src/main/java/org/apache/struts2/util/TokenHelper.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.util; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - import com.opensymphony.util.GUID; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.LocalizedTextUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Map; /** * TokenHelper diff --git a/core/src/main/java/org/apache/struts2/util/URLBean.java b/core/src/main/java/org/apache/struts2/util/URLBean.java index db5cd3db4..0809e945e 100644 --- a/core/src/main/java/org/apache/struts2/util/URLBean.java +++ b/core/src/main/java/org/apache/struts2/util/URLBean.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.util; -import java.util.HashMap; -import java.util.Map; +import org.apache.struts2.views.util.UrlHelper; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import org.apache.struts2.views.util.UrlHelper; +import java.util.HashMap; +import java.util.Map; /** diff --git a/core/src/main/java/org/apache/struts2/util/VelocityStrutsUtil.java b/core/src/main/java/org/apache/struts2/util/VelocityStrutsUtil.java index 5a28b093b..5408c89af 100644 --- a/core/src/main/java/org/apache/struts2/util/VelocityStrutsUtil.java +++ b/core/src/main/java/org/apache/struts2/util/VelocityStrutsUtil.java @@ -17,19 +17,17 @@ */ package org.apache.struts2.util; -import java.io.CharArrayWriter; -import java.io.IOException; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.views.velocity.VelocityManager; +import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.velocity.context.Context; import org.apache.velocity.exception.MethodInvocationException; import org.apache.velocity.exception.ParseErrorException; import org.apache.velocity.exception.ResourceNotFoundException; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.CharArrayWriter; +import java.io.IOException; /** diff --git a/core/src/main/java/org/apache/struts2/util/classloader/CompilingClassLoader.java b/core/src/main/java/org/apache/struts2/util/classloader/CompilingClassLoader.java index a8346e5d8..d461ce89b 100644 --- a/core/src/main/java/org/apache/struts2/util/classloader/CompilingClassLoader.java +++ b/core/src/main/java/org/apache/struts2/util/classloader/CompilingClassLoader.java @@ -17,17 +17,16 @@ */ package org.apache.struts2.util.classloader; -import java.io.File; - import org.apache.struts2.util.classloader.compilers.JavaCompiler; import org.apache.struts2.util.classloader.compilers.eclipse.EclipseJavaCompiler; import org.apache.struts2.util.classloader.listeners.CompilingListener; import org.apache.struts2.util.classloader.monitor.FilesystemAlterationMonitor; import org.apache.struts2.util.classloader.stores.MemoryResourceStore; import org.apache.struts2.util.classloader.stores.TransactionalResourceStore; - import com.uwyn.rife.continuations.ClassByteAware; +import java.io.File; + /** */ public class CompilingClassLoader extends ReloadingClassLoader implements ClassByteAware { diff --git a/core/src/main/java/org/apache/struts2/util/classloader/ReloadingClassLoader.java b/core/src/main/java/org/apache/struts2/util/classloader/ReloadingClassLoader.java index 3f17829f4..4a405890a 100644 --- a/core/src/main/java/org/apache/struts2/util/classloader/ReloadingClassLoader.java +++ b/core/src/main/java/org/apache/struts2/util/classloader/ReloadingClassLoader.java @@ -17,23 +17,21 @@ */ package org.apache.struts2.util.classloader; -import java.io.File; -import java.io.InputStream; -import java.net.URL; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.util.classloader.listeners.CompilingListener; import org.apache.struts2.util.classloader.listeners.ReloadingListener; +import org.apache.struts2.util.classloader.listeners.CompilingListener; import org.apache.struts2.util.classloader.monitor.FilesystemAlterationMonitor; import org.apache.struts2.util.classloader.readers.FileResourceReader; import org.apache.struts2.util.classloader.readers.ResourceReader; import org.apache.struts2.util.classloader.stores.MemoryResourceStore; import org.apache.struts2.util.classloader.stores.ResourceStore; import org.apache.struts2.util.classloader.stores.ResourceStoreClassLoader; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.File; +import java.io.InputStream; +import java.net.URL; +import java.util.*; /** */ diff --git a/core/src/main/java/org/apache/struts2/util/classloader/compilers/eclipse/EclipseJavaCompiler.java b/core/src/main/java/org/apache/struts2/util/classloader/compilers/eclipse/EclipseJavaCompiler.java index c5beed764..5c75c5870 100644 --- a/core/src/main/java/org/apache/struts2/util/classloader/compilers/eclipse/EclipseJavaCompiler.java +++ b/core/src/main/java/org/apache/struts2/util/classloader/compilers/eclipse/EclipseJavaCompiler.java @@ -17,31 +17,16 @@ */ package org.apache.struts2.util.classloader.compilers.eclipse; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.HashSet; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.StringTokenizer; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.struts2.util.classloader.compilers.JavaCompiler; import org.apache.struts2.util.classloader.problems.CompilationProblemHandler; import org.apache.struts2.util.classloader.readers.ResourceReader; import org.apache.struts2.util.classloader.stores.ResourceStore; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.eclipse.jdt.core.compiler.IProblem; -import org.eclipse.jdt.internal.compiler.ClassFile; -import org.eclipse.jdt.internal.compiler.CompilationResult; +import org.eclipse.jdt.internal.compiler.*; import org.eclipse.jdt.internal.compiler.Compiler; -import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies; -import org.eclipse.jdt.internal.compiler.ICompilerRequestor; -import org.eclipse.jdt.internal.compiler.IErrorHandlingPolicy; -import org.eclipse.jdt.internal.compiler.IProblemFactory; import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader; import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException; import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; @@ -49,6 +34,12 @@ import org.eclipse.jdt.internal.compiler.env.INameEnvironment; import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer; import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.*; + public final class EclipseJavaCompiler implements JavaCompiler { private final static Log log = LogFactory.getLog(EclipseJavaCompiler.class); diff --git a/core/src/main/java/org/apache/struts2/util/classloader/compilers/eclipse/EclipseJavaCompilerSettings.java b/core/src/main/java/org/apache/struts2/util/classloader/compilers/eclipse/EclipseJavaCompilerSettings.java index 1a782b735..a55421a82 100644 --- a/core/src/main/java/org/apache/struts2/util/classloader/compilers/eclipse/EclipseJavaCompilerSettings.java +++ b/core/src/main/java/org/apache/struts2/util/classloader/compilers/eclipse/EclipseJavaCompilerSettings.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.util.classloader.compilers.eclipse; -import java.util.HashMap; -import java.util.Map; - import org.apache.struts2.util.classloader.compilers.JavaCompilerSettings; import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; +import java.util.HashMap; +import java.util.Map; + public class EclipseJavaCompilerSettings implements JavaCompilerSettings { private final Map map = new HashMap(); diff --git a/core/src/main/java/org/apache/struts2/util/classloader/listeners/CompilingListener.java b/core/src/main/java/org/apache/struts2/util/classloader/listeners/CompilingListener.java index 121f78733..3afea5736 100644 --- a/core/src/main/java/org/apache/struts2/util/classloader/listeners/CompilingListener.java +++ b/core/src/main/java/org/apache/struts2/util/classloader/listeners/CompilingListener.java @@ -17,21 +17,21 @@ */ package org.apache.struts2.util.classloader.listeners; -import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.struts2.util.classloader.ReloadingClassLoader; import org.apache.struts2.util.classloader.compilers.JavaCompiler; import org.apache.struts2.util.classloader.monitor.FilesystemAlterationListener; import org.apache.struts2.util.classloader.problems.CompilationProblem; -import org.apache.struts2.util.classloader.problems.ConsoleCompilationProblemHandler; import org.apache.struts2.util.classloader.problems.DefaultCompilationProblemHandler; +import org.apache.struts2.util.classloader.problems.ConsoleCompilationProblemHandler; import org.apache.struts2.util.classloader.readers.ResourceReader; import org.apache.struts2.util.classloader.stores.TransactionalResourceStore; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; public class CompilingListener implements FilesystemAlterationListener { diff --git a/core/src/main/java/org/apache/struts2/util/classloader/listeners/ReloadingListener.java b/core/src/main/java/org/apache/struts2/util/classloader/listeners/ReloadingListener.java index c687fb3cf..4e7e5bcf6 100644 --- a/core/src/main/java/org/apache/struts2/util/classloader/listeners/ReloadingListener.java +++ b/core/src/main/java/org/apache/struts2/util/classloader/listeners/ReloadingListener.java @@ -17,18 +17,18 @@ */ package org.apache.struts2.util.classloader.listeners; +import org.apache.struts2.util.classloader.monitor.FilesystemAlterationListener; +import org.apache.struts2.util.classloader.stores.ResourceStore; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; -import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.util.classloader.monitor.FilesystemAlterationListener; -import org.apache.struts2.util.classloader.stores.ResourceStore; - public class ReloadingListener implements FilesystemAlterationListener { diff --git a/core/src/main/java/org/apache/struts2/util/classloader/monitor/FilesystemAlterationMonitor.java b/core/src/main/java/org/apache/struts2/util/classloader/monitor/FilesystemAlterationMonitor.java index 0be7f0e5b..de970b0c5 100644 --- a/core/src/main/java/org/apache/struts2/util/classloader/monitor/FilesystemAlterationMonitor.java +++ b/core/src/main/java/org/apache/struts2/util/classloader/monitor/FilesystemAlterationMonitor.java @@ -17,19 +17,14 @@ */ package org.apache.struts2.util.classloader.monitor; -import java.io.File; -import java.io.FileFilter; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - +import org.apache.struts2.util.classloader.utils.ThreadUtils; import org.apache.commons.collections.MultiHashMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.struts2.util.classloader.utils.ThreadUtils; + +import java.io.File; +import java.io.FileFilter; +import java.util.*; /** */ diff --git a/core/src/main/java/org/apache/struts2/util/classloader/readers/FileResourceReader.java b/core/src/main/java/org/apache/struts2/util/classloader/readers/FileResourceReader.java index bd76fdeab..72c55ec05 100644 --- a/core/src/main/java/org/apache/struts2/util/classloader/readers/FileResourceReader.java +++ b/core/src/main/java/org/apache/struts2/util/classloader/readers/FileResourceReader.java @@ -17,10 +17,10 @@ */ package org.apache.struts2.util.classloader.readers; -import java.io.File; - import org.apache.commons.io.FileUtils; +import java.io.File; + /** */ public final class FileResourceReader implements ResourceReader { diff --git a/core/src/main/java/org/apache/struts2/util/classloader/stores/FileResourceStore.java b/core/src/main/java/org/apache/struts2/util/classloader/stores/FileResourceStore.java index 45d9d3c64..63ccbbf41 100644 --- a/core/src/main/java/org/apache/struts2/util/classloader/stores/FileResourceStore.java +++ b/core/src/main/java/org/apache/struts2/util/classloader/stores/FileResourceStore.java @@ -17,16 +17,10 @@ */ package org.apache.struts2.util.classloader.stores; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - import org.apache.commons.io.IOUtils; +import java.io.*; + /** */ diff --git a/core/src/main/java/org/apache/struts2/util/classloader/stores/MemoryResourceStore.java b/core/src/main/java/org/apache/struts2/util/classloader/stores/MemoryResourceStore.java index 58a60d5b1..dcdf23eb3 100644 --- a/core/src/main/java/org/apache/struts2/util/classloader/stores/MemoryResourceStore.java +++ b/core/src/main/java/org/apache/struts2/util/classloader/stores/MemoryResourceStore.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.util.classloader.stores; -import java.util.HashMap; -import java.util.Map; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.HashMap; +import java.util.Map; + /** */ diff --git a/core/src/main/java/org/apache/struts2/validators/DWRValidator.java b/core/src/main/java/org/apache/struts2/validators/DWRValidator.java index 83e9a2eac..b18ca77b6 100644 --- a/core/src/main/java/org/apache/struts2/validators/DWRValidator.java +++ b/core/src/main/java/org/apache/struts2/validators/DWRValidator.java @@ -17,30 +17,23 @@ */ package org.apache.struts2.validators; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.struts2.dispatcher.ApplicationMap; import org.apache.struts2.dispatcher.Dispatcher; import org.apache.struts2.dispatcher.RequestMap; import org.apache.struts2.dispatcher.SessionMap; - -import uk.ltd.getahead.dwr.WebContextFactory; - -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.DefaultActionInvocation; -import com.opensymphony.xwork2.DefaultActionProxy; -import com.opensymphony.xwork2.ValidationAware; -import com.opensymphony.xwork2.ValidationAwareSupport; +import com.opensymphony.xwork2.*; import com.opensymphony.xwork2.config.Configuration; +import com.opensymphony.xwork2.config.ConfigurationManager; import com.opensymphony.xwork2.config.entities.ActionConfig; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import uk.ltd.getahead.dwr.ExecutionContext; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; /** *

@@ -63,9 +56,9 @@ public class DWRValidator { private static final Log LOG = LogFactory.getLog(DWRValidator.class); public ValidationAwareSupport doPost(String namespace, String action, Map params) throws Exception { - HttpServletRequest req = WebContextFactory.get().getHttpServletRequest(); - ServletContext servletContext = WebContextFactory.get().getServletContext(); - HttpServletResponse res = WebContextFactory.get().getHttpServletResponse(); + HttpServletRequest req = ExecutionContext.get().getHttpServletRequest(); + ServletContext servletContext = ExecutionContext.get().getServletContext(); + HttpServletResponse res = ExecutionContext.get().getHttpServletResponse(); Map requestParams = new HashMap(req.getParameterMap()); if (params != null) { @@ -109,11 +102,6 @@ public class DWRValidator { } public static class ValidatorActionInvocation extends DefaultActionInvocation { - /** - * - */ - private static final long serialVersionUID = -7645433725470191275L; - protected ValidatorActionInvocation(ActionProxy proxy, Map extraContext) throws Exception { super(proxy, extraContext, true); } @@ -124,11 +112,6 @@ public class DWRValidator { } public static class ValidatorActionProxy extends DefaultActionProxy { - /** - * - */ - private static final long serialVersionUID = 5754781916414047963L; - protected ValidatorActionProxy(Configuration config, String namespace, String actionName, Map extraContext) throws Exception { super(config, namespace, actionName, extraContext, false, true); } diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java index 468fcec5b..36c5defeb 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java @@ -17,30 +17,14 @@ */ package org.apache.struts2.views.freemarker; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.Map; -import java.util.Properties; - -import javax.servlet.GenericServlet; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.StrutsConstants; +import com.opensymphony.util.FileManager; import org.apache.struts2.config.Settings; import org.apache.struts2.views.JspSupportServlet; import org.apache.struts2.views.freemarker.tags.StrutsModels; import org.apache.struts2.views.util.ContextUtil; - -import com.opensymphony.util.FileManager; +import org.apache.struts2.StrutsConstants; import com.opensymphony.xwork2.ObjectFactory; import com.opensymphony.xwork2.util.OgnlValueStack; - import freemarker.cache.FileTemplateLoader; import freemarker.cache.MultiTemplateLoader; import freemarker.cache.TemplateLoader; @@ -51,11 +35,20 @@ import freemarker.ext.servlet.HttpRequestHashModel; import freemarker.ext.servlet.HttpRequestParametersHashModel; import freemarker.ext.servlet.HttpSessionHashModel; import freemarker.ext.servlet.ServletContextHashModel; -import freemarker.template.ObjectWrapper; -import freemarker.template.SimpleHash; -import freemarker.template.TemplateException; -import freemarker.template.TemplateExceptionHandler; -import freemarker.template.TemplateModel; +import freemarker.template.*; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.GenericServlet; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; +import java.util.Properties; /** @@ -102,6 +95,7 @@ public class FreemarkerManager { // coppied from freemarker servlet - since they are private private static final String ATTR_APPLICATION_MODEL = ".freemarker.Application"; private static final String ATTR_JSP_TAGLIBS_MODEL = ".freemarker.JspTaglibs"; + private static final String ATTR_SESSION_MODEL = ".freemarker.Session"; private static final String ATTR_REQUEST_MODEL = ".freemarker.Request"; private static final String ATTR_REQUEST_PARAMETERS_MODEL = ".freemarker.RequestParameters"; @@ -189,6 +183,8 @@ public class FreemarkerManager { } // Create hash model wrapper for session + TemplateHashModel sessionModel; + HttpSession session = request.getSession(false); if (session != null) { model.put(KEY_SESSION_MODEL, new HttpSessionHashModel(session, wrapper)); @@ -336,7 +332,7 @@ public class FreemarkerManager { public SimpleHash buildTemplateModel(OgnlValueStack stack, Object action, ServletContext servletContext, HttpServletRequest request, HttpServletResponse response, ObjectWrapper wrapper) { ScopesHashModel model = buildScopesHashModel(servletContext, request, response, wrapper, stack); populateContext(model, stack, action, request, response); - model.put("saf", new StrutsModels(stack, request, response)); + model.put("s", new StrutsModels(stack, request, response)); return model; } } diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java index ad78752ff..347c1dfed 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java @@ -17,29 +17,21 @@ */ package org.apache.struts2.views.freemarker; -import java.io.IOException; -import java.io.Writer; -import java.util.Locale; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.StrutsResultSupport; import org.apache.struts2.views.util.ResourceUtil; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.LocaleProvider; import com.opensymphony.xwork2.util.OgnlValueStack; +import freemarker.template.*; -import freemarker.template.Configuration; -import freemarker.template.ObjectWrapper; -import freemarker.template.Template; -import freemarker.template.TemplateException; -import freemarker.template.TemplateModel; -import freemarker.template.TemplateModelException; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.Writer; +import java.util.Locale; /** @@ -98,7 +90,7 @@ public class FreemarkerResult extends StrutsResultSupport { protected ObjectWrapper wrapper; /* - * Struts results are constructed for each result execeution + * Struts results are constructed for each result execution * * the current context is availible to subclasses via these protected fields */ @@ -199,8 +191,8 @@ public class FreemarkerResult extends StrutsResultSupport { *

  • JspTaglibs - jsp tag lib factory model *
  • Request - request attributes hash model *
  • Session - session attributes hash model - *
  • req - the HttpServletRequst object for direct access - *
  • res - the HttpServletResponse object for direct access + *
  • request - the HttpServletRequst object for direct access + *
  • response - the HttpServletResponse object for direct access *
  • stack - the OgnLValueStack instance for direct access *
  • ognl - the instance of the OgnlTool *
  • action - the action itself diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java b/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java index 6fe3e54b8..82b221179 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/PortletFreemarkerResult.java @@ -33,7 +33,7 @@ import org.apache.struts2.dispatcher.StrutsResultSupport; import org.apache.struts2.portlet.PortletActionConstants; import org.apache.struts2.portlet.context.PortletActionContext; import org.apache.struts2.views.util.ResourceUtil; - +import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.util.OgnlValueStack; @@ -125,8 +125,10 @@ public class PortletFreemarkerResult extends StrutsResultSupport { this.wrapper = getObjectWrapper(); HttpServletRequest req = ServletActionContext.getRequest(); + HttpServletResponse res = ServletActionContext.getResponse(); if (!location.startsWith("/")) { + ActionContext ctx = invocation.getInvocationContext(); String base = ResourceUtil.getResourceBase(req); location = base + "/" + location; } @@ -196,8 +198,8 @@ public class PortletFreemarkerResult extends StrutsResultSupport { *
  • JspTaglibs - jsp tag lib factory model *
  • Request - request attributes hash model *
  • Session - session attributes hash model - *
  • req - the HttpServletRequst object for direct access - *
  • res - the HttpServletResponse object for direct access + *
  • request - the HttpServletRequst object for direct access + *
  • response - the HttpServletResponse object for direct access *
  • stack - the OgnLValueStack instance for direct access *
  • ognl - the instance of the OgnlTool *
  • action - the action itself diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java index f7ad37c3e..1738dd8b7 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java @@ -17,17 +17,16 @@ */ package org.apache.struts2.views.freemarker; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - import com.opensymphony.xwork2.util.OgnlValueStack; - import freemarker.template.ObjectWrapper; import freemarker.template.SimpleHash; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + /** * Simple Hash model that also searches other scopes. @@ -41,6 +40,7 @@ public class ScopesHashModel extends SimpleHash { private static final long serialVersionUID = 5551686380141886764L; private HttpServletRequest request; + private ObjectWrapper objectWraper; private ServletContext servletContext; private OgnlValueStack stack; diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java b/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java index 1cf4284a4..0e6ca0dd0 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java @@ -17,20 +17,14 @@ */ package org.apache.struts2.views.freemarker; -import java.util.Map; -import java.util.Set; - import freemarker.core.CollectionAndSequence; import freemarker.ext.beans.BeansWrapper; import freemarker.ext.beans.MapModel; import freemarker.ext.util.ModelFactory; -import freemarker.template.ObjectWrapper; -import freemarker.template.SimpleSequence; -import freemarker.template.TemplateBooleanModel; -import freemarker.template.TemplateCollectionModel; -import freemarker.template.TemplateHashModelEx; -import freemarker.template.TemplateModel; -import freemarker.template.TemplateModelException; +import freemarker.template.*; + +import java.util.Map; +import java.util.Set; /** * diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/StrutsClassTemplateLoader.java b/core/src/main/java/org/apache/struts2/views/freemarker/StrutsClassTemplateLoader.java index 404bf022a..9ad687172 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/StrutsClassTemplateLoader.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/StrutsClassTemplateLoader.java @@ -17,12 +17,11 @@ */ package org.apache.struts2.views.freemarker; -import java.net.URL; - import com.opensymphony.util.ClassLoaderUtil; - import freemarker.cache.URLTemplateLoader; +import java.net.URL; + /** */ public class StrutsClassTemplateLoader extends URLTemplateLoader { diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionErrorModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionErrorModel.java index 37ea1ee30..0d0236672 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionErrorModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionErrorModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; +import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.struts2.components.Component; +import org.apache.struts2.components.ActionError; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.struts2.components.ActionError; -import org.apache.struts2.components.Component; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * @see ActionError */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionMessageModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionMessageModel.java index 7c1fe87e9..92860c44c 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionMessageModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionMessageModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; +import org.apache.struts2.components.Component; +import org.apache.struts2.components.ActionMessage; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.struts2.components.ActionMessage; -import org.apache.struts2.components.Component; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * @see ActionMessage */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionModel.java index 0b5934cbd..9b12f62e8 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ActionModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.ActionComponent; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see ActionComponent */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/AnchorModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/AnchorModel.java index a65916974..e4a4ab739 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/AnchorModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/AnchorModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; +import org.apache.struts2.components.Component; +import org.apache.struts2.components.Anchor; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.struts2.components.Anchor; -import org.apache.struts2.components.Component; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * @see Anchor */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/BeanModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/BeanModel.java index 1c2155752..246fc3e2f 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/BeanModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/BeanModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Bean; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Bean */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/CallbackWriter.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/CallbackWriter.java index cedd7b6b0..880bf5ad6 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/CallbackWriter.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/CallbackWriter.java @@ -17,15 +17,14 @@ */ package org.apache.struts2.views.freemarker.tags; +import org.apache.struts2.components.Component; +import freemarker.template.TemplateModelException; +import freemarker.template.TransformControl; + import java.io.IOException; import java.io.StringWriter; import java.io.Writer; -import org.apache.struts2.components.Component; - -import freemarker.template.TemplateModelException; -import freemarker.template.TransformControl; - /** */ public class CallbackWriter extends Writer implements TransformControl { diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxListModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxListModel.java index 69617a70c..510b1bfa3 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxListModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxListModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.CheckboxList; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see CheckboxList */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxModel.java index e0769e10b..abb4be8f7 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/CheckboxModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Checkbox; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Checkbox */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComboBoxModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComboBoxModel.java index b8dfbf95d..92c27479d 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComboBoxModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComboBoxModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.ComboBox; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see ComboBox */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComponentModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComponentModel.java index 973ed4c89..14639090c 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComponentModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ComponentModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.GenericUIBean; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see ComponentModel */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/DateModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/DateModel.java index d1d0caa80..96c6754d0 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/DateModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/DateModel.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.struts2.components.Component; import org.apache.struts2.components.Date; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** * DateModel diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/DatePickerModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/DatePickerModel.java index e85119e76..09a470223 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/DatePickerModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/DatePickerModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.DatePicker; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see DatePicker */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/DivModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/DivModel.java index 64ca26293..556621593 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/DivModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/DivModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Div; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Div */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/DoubleSelectModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/DoubleSelectModel.java index 50be1b6db..c7f407aeb 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/DoubleSelectModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/DoubleSelectModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.DoubleSelect; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see DoubleSelect */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/FieldErrorModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/FieldErrorModel.java index 9831a710a..4059e72fd 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/FieldErrorModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/FieldErrorModel.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.struts2.components.Component; import org.apache.struts2.components.FieldError; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** * @see FieldError diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/FileModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/FileModel.java index cff0035ed..6777a0bcd 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/FileModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/FileModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.File; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see File */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/FormModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/FormModel.java index 9c7ba9797..a6f9489a1 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/FormModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/FormModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Form; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Form */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/HeadModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/HeadModel.java index 8be7cbfd8..9e3054936 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/HeadModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/HeadModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Head; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Head */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/HiddenModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/HiddenModel.java index 303ec4768..e03612630 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/HiddenModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/HiddenModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Hidden; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Hidden */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/I18nModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/I18nModel.java index bfca2cb09..5fdacd422 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/I18nModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/I18nModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.I18n; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see I18n */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/IncludeModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/IncludeModel.java index 1743c2bb4..0dade61ab 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/IncludeModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/IncludeModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Include; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Include */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/IteratorModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/IteratorModel.java index 48b908bd9..b65e66e4c 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/IteratorModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/IteratorModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.IteratorComponent; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see IteratorComponent */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/LabelModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/LabelModel.java index af3e2e28e..bb0d7667b 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/LabelModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/LabelModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Label; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Label */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptGroupModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptGroupModel.java index f46ba4ba6..83c7bfe5e 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptGroupModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptGroupModel.java @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.struts2.components.Component; import org.apache.struts2.components.OptGroup; - import com.opensymphony.xwork2.util.OgnlValueStack; /** diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptionTransferSelectModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptionTransferSelectModel.java index 3b12fb550..bdea9c0c6 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptionTransferSelectModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/OptionTransferSelectModel.java @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.struts2.components.Component; import org.apache.struts2.components.OptionTransferSelect; - import com.opensymphony.xwork2.util.OgnlValueStack; /** diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/PanelModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/PanelModel.java index 2cf3afe28..3be6f12db 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/PanelModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/PanelModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Panel; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Panel */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ParamModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ParamModel.java index 604b800e1..332761760 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ParamModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ParamModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Param; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Param */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/PasswordModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/PasswordModel.java index 382fcd6ee..695ff7415 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/PasswordModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/PasswordModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Password; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Password */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/PropertyModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/PropertyModel.java index e47606d8e..2b5aa8a71 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/PropertyModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/PropertyModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Property; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Property */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/PushModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/PushModel.java index 385b0319d..8bb873e6d 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/PushModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/PushModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Push; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Push */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/RadioModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/RadioModel.java index 22aa2e247..3aae3417c 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/RadioModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/RadioModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Radio; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Radio */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ResetModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ResetModel.java index a4eef8142..8fb8cc6e3 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/ResetModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/ResetModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Reset; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see org.apache.struts2.components.Reset */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/SelectModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/SelectModel.java index 09fad160c..920508b79 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/SelectModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/SelectModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Select; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Select */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/SetModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/SetModel.java index 2b61894e0..28833873d 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/SetModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/SetModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Set; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Set */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java index 96ed29408..0525ce2ee 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/StrutsModels.java @@ -17,13 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** - * Provides @ww.xxx access for various tags. + * Provides @s.tag access for various tags. * */ public class StrutsModels { diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/SubmitModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/SubmitModel.java index 43f6c0ada..6edfcf8f4 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/SubmitModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/SubmitModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Submit; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Submit */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TabbedPanelModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TabbedPanelModel.java index 1d8d26df7..60fe063b7 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TabbedPanelModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TabbedPanelModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.TabbedPanel; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see TabbedPanel */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TagModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TagModel.java index 6e3c39624..0ab229c04 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TagModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TagModel.java @@ -17,25 +17,23 @@ */ package org.apache.struts2.views.freemarker.tags; +import org.apache.struts2.components.Component; +import com.opensymphony.xwork2.util.OgnlValueStack; +import freemarker.template.SimpleNumber; +import freemarker.template.TemplateModelException; +import freemarker.template.TemplateTransformModel; +import freemarker.template.SimpleSequence; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Writer; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.struts2.components.Component; - -import com.opensymphony.xwork2.util.OgnlValueStack; - -import freemarker.template.SimpleNumber; -import freemarker.template.SimpleSequence; -import freemarker.template.TemplateModelException; -import freemarker.template.TemplateTransformModel; public abstract class TagModel implements TemplateTransformModel { private static final Log LOG = LogFactory.getLog(TagModel.class); diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextAreaModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextAreaModel.java index 3a901cd83..980b7ca27 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextAreaModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextAreaModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.TextArea; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see TextArea */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextFieldModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextFieldModel.java index 410290bb0..85cbf1112 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextFieldModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextFieldModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.TextField; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see TextField */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextModel.java index fc7c2097f..d26001728 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TextModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Text; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Text */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TokenModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TokenModel.java index 3940d6c2d..0289412ee 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TokenModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TokenModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Token; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Token */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeModel.java index 208259e3d..d336eedcd 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Tree; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * TreeModel * @see Tree diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeNodeModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeNodeModel.java index 6798fb3ed..8cd64765e 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeNodeModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/TreeNodeModel.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.struts2.components.Component; import org.apache.struts2.components.TreeNode; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** * TreeNodeModel diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/URLModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/URLModel.java index 3a71e97dc..0df4b9a18 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/URLModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/URLModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.URL; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see URL */ diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/UpDownSelectModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/UpDownSelectModel.java index bc4ed7f21..e650b0079 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/UpDownSelectModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/UpDownSelectModel.java @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.struts2.components.Component; import org.apache.struts2.components.UpDownSelect; - import com.opensymphony.xwork2.util.OgnlValueStack; /** diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/tags/WebTableModel.java b/core/src/main/java/org/apache/struts2/views/freemarker/tags/WebTableModel.java index 80fa50042..ad8f70cb6 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/tags/WebTableModel.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/tags/WebTableModel.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.freemarker.tags; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.table.WebTable; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see WebTable */ diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ActionTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ActionTag.java index e2db8b950..2ca422800 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/ActionTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/ActionTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.ActionComponent; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see ActionComponent */ diff --git a/core/src/main/java/org/apache/struts2/views/jsp/BeanTag.java b/core/src/main/java/org/apache/struts2/views/jsp/BeanTag.java index 773f1733a..fcf006672 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/BeanTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/BeanTag.java @@ -17,15 +17,14 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.struts2.components.Bean; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ComponentTagSupport.java b/core/src/main/java/org/apache/struts2/views/jsp/ComponentTagSupport.java index 922697b1f..9090833c8 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/ComponentTagSupport.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/ComponentTagSupport.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; +import org.apache.struts2.components.Component; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; -import org.apache.struts2.components.Component; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** */ public abstract class ComponentTagSupport extends StrutsBodyTagSupport { diff --git a/core/src/main/java/org/apache/struts2/views/jsp/DateTag.java b/core/src/main/java/org/apache/struts2/views/jsp/DateTag.java index 7e6e77233..e6e59402d 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/DateTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/DateTag.java @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.struts2.components.Component; import org.apache.struts2.components.Date; - import com.opensymphony.xwork2.util.OgnlValueStack; /** diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ElseIfTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ElseIfTag.java index 1c6c397b1..45f26c9d5 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/ElseIfTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/ElseIfTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.ElseIf; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see ElseIf */ diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ElseTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ElseTag.java index f4dc51675..817f66e12 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/ElseTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/ElseTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Else; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Else diff --git a/core/src/main/java/org/apache/struts2/views/jsp/I18nTag.java b/core/src/main/java/org/apache/struts2/views/jsp/I18nTag.java index 26d2fa6a6..903798f00 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/I18nTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/I18nTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.I18n; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see I18n diff --git a/core/src/main/java/org/apache/struts2/views/jsp/IfTag.java b/core/src/main/java/org/apache/struts2/views/jsp/IfTag.java index 6382216f0..4bb2d380c 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/IfTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/IfTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.If; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see If diff --git a/core/src/main/java/org/apache/struts2/views/jsp/IncludeTag.java b/core/src/main/java/org/apache/struts2/views/jsp/IncludeTag.java index d6820925d..e011d2801 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/IncludeTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/IncludeTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Include; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Include diff --git a/core/src/main/java/org/apache/struts2/views/jsp/IteratorTag.java b/core/src/main/java/org/apache/struts2/views/jsp/IteratorTag.java index b9700904c..7d260fdf8 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/IteratorTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/IteratorTag.java @@ -17,15 +17,14 @@ */ package org.apache.struts2.views.jsp; +import org.apache.struts2.components.Component; +import org.apache.struts2.components.IteratorComponent; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; -import org.apache.struts2.components.Component; -import org.apache.struts2.components.IteratorComponent; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * @see IteratorComponent */ diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ParamTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ParamTag.java index cc12ffe54..d3c05865f 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/ParamTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/ParamTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Param; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Param */ diff --git a/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java b/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java index d62cb67fe..67688f5da 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Property; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Property diff --git a/core/src/main/java/org/apache/struts2/views/jsp/PushTag.java b/core/src/main/java/org/apache/struts2/views/jsp/PushTag.java index 6f8d9892c..d7cb47f45 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/PushTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/PushTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Push; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Push diff --git a/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java b/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java index 4f73df24a..0dac078b0 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Set; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Set diff --git a/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java b/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java index b9804e2a7..cce5557aa 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java @@ -17,15 +17,13 @@ */ package org.apache.struts2.views.jsp; -import java.io.PrintWriter; - -import javax.servlet.jsp.tagext.BodyTagSupport; - import org.apache.struts2.util.FastByteArrayOutputStream; import org.apache.struts2.views.util.ContextUtil; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.jsp.tagext.BodyTagSupport; +import java.io.PrintWriter; + /** * Contains common functonalities for Struts JSP Tags. @@ -36,7 +34,7 @@ public class StrutsBodyTagSupport extends BodyTagSupport { private static final long serialVersionUID = -1201668454354226175L; /** - * @ww.tagattribute required="false" type="String" + * @s.tagattribute required="false" type="String" * description="The id of the tag element." */ public void setId(String string) { diff --git a/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java b/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java index 3e3596f53..a00798168 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java @@ -17,12 +17,6 @@ */ package org.apache.struts2.views.jsp; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.PageContext; - import org.apache.struts2.RequestUtils; import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.ApplicationMap; @@ -33,11 +27,15 @@ import org.apache.struts2.dispatcher.mapper.ActionMapper; import org.apache.struts2.dispatcher.mapper.ActionMapperFactory; import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.util.AttributeMap; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.jsp.PageContext; +import java.util.Map; + /** */ diff --git a/core/src/main/java/org/apache/struts2/views/jsp/TextTag.java b/core/src/main/java/org/apache/struts2/views/jsp/TextTag.java index f1d53702d..f8e5df338 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/TextTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/TextTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Text; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Text diff --git a/core/src/main/java/org/apache/struts2/views/jsp/URLTag.java b/core/src/main/java/org/apache/struts2/views/jsp/URLTag.java index 256a6c06b..53e915fbf 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/URLTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/URLTag.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.URL; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see URL diff --git a/core/src/main/java/org/apache/struts2/views/jsp/iterator/AppendIteratorTag.java b/core/src/main/java/org/apache/struts2/views/jsp/iterator/AppendIteratorTag.java index fd455c43c..754f68ebc 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/iterator/AppendIteratorTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/iterator/AppendIteratorTag.java @@ -17,15 +17,14 @@ */ package org.apache.struts2.views.jsp.iterator; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.AppendIterator; import org.apache.struts2.components.Component; import org.apache.struts2.views.jsp.ComponentTagSupport; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * Append a list of iterators. The values of the iterators will be merged diff --git a/core/src/main/java/org/apache/struts2/views/jsp/iterator/IteratorGeneratorTag.java b/core/src/main/java/org/apache/struts2/views/jsp/iterator/IteratorGeneratorTag.java index f74a4c88c..d1f86c6a9 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/iterator/IteratorGeneratorTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/iterator/IteratorGeneratorTag.java @@ -17,13 +17,14 @@ */ package org.apache.struts2.views.jsp.iterator; +import org.apache.struts2.util.IteratorGenerator; +import org.apache.struts2.util.IteratorGenerator.Converter; +import org.apache.struts2.views.jsp.StrutsBodyTagSupport; + import javax.servlet.jsp.JspException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.struts2.util.IteratorGenerator; -import org.apache.struts2.util.IteratorGenerator.Converter; -import org.apache.struts2.views.jsp.StrutsBodyTagSupport; /** @@ -51,22 +52,22 @@ import org.apache.struts2.views.jsp.StrutsBodyTagSupport; * Example One: *
      * Generate a simple iterator
    - * <a:generator val="%{'aaa,bbb,ccc,ddd,eee'}">
    - *	<a:iterator>
    - *		<a:property /><br/>
    - *	</a:iterator>
    - * </a:generator>
    + * <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}">
    + *	<s:iterator>
    + *		<s:property /><br/>
    + *	</s:iterator>
    + * </s:generator>
      * 
    * This generates an iterator and print it out using the iterator tag. * * Example Two: *
      * Generate an iterator with count attribute
    - * <a:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3">
    - *	<a:iterator>
    - *		<a:property /><br/>
    - *	</a:iterator>
    - * </a:generator>
    + * <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3">
    + *	<s:iterator>
    + *		<s:property /><br/>
    + *	</s:iterator>
    + * </s:generator>
      * 
    * This generates an iterator, but only 3 entries will be available in the iterator * generated, namely aaa, bbb and ccc respectively because count attribute is set to 3 @@ -74,7 +75,7 @@ import org.apache.struts2.views.jsp.StrutsBodyTagSupport; * Example Three: *
      * Generate an iterator with id attribute
    - * <a:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" />
    + * <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" />
      * <%
      * 	Iterator i = (Iterator) pageContext.getAttribute("myAtt");
      * 	while(i.hasNext()) {
    @@ -90,11 +91,11 @@ import org.apache.struts2.views.jsp.StrutsBodyTagSupport;
      * Example Four:
      * 
      * Generate an iterator with comparator attribute
    - * <a:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}">
    - *	<a:iterator>
    - * 		<a:property /><br/>
    - * 	</a:iterator>
    - * </a:generator>
    + * <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}">
    + *	<s:iterator>
    + * 		<s:property /><br/>
    + * 	</s:iterator>
    + * </s:generator>
      *
      *
      * public class GeneratorTagAction extends ActionSupport {
    @@ -119,7 +120,7 @@ import org.apache.struts2.views.jsp.StrutsBodyTagSupport;
      *
      * @see org.apache.struts2.util.IteratorGenerator
      *
    - * @ww.tag name="generator" tld-body-content="JSP"
    + * @s.tag name="generator" tld-body-content="JSP"
      * description="Generate an iterator for a iterable source."
      */
     public class IteratorGeneratorTag extends StrutsBodyTagSupport {
    @@ -138,7 +139,7 @@ public class IteratorGeneratorTag extends StrutsBodyTagSupport {
         IteratorGenerator iteratorGenerator = null;
     
         /**
    -     * @ww.tagattribute required="false" type="Integer"
    +     * @s.tagattribute required="false" type="Integer"
          * description="the max number entries to be in the iterator"
          */
         public void setCount(String count) {
    @@ -146,7 +147,7 @@ public class IteratorGeneratorTag extends StrutsBodyTagSupport {
         }
     
         /**
    -     * @ww.tagattribute required="true" type="String"
    +     * @s.tagattribute required="true" type="String"
          * description="the separator to be used in separating the val into entries of the iterator"
          */
         public void setSeparator(String separator) {
    @@ -154,7 +155,7 @@ public class IteratorGeneratorTag extends StrutsBodyTagSupport {
         }
     
         /**
    -     * @ww.tagattribute required="true"
    +     * @s.tagattribute required="true"
          * description="the source to be parsed into an iterator"
          */
         public void setVal(String val) {
    @@ -162,7 +163,7 @@ public class IteratorGeneratorTag extends StrutsBodyTagSupport {
         }
     
         /**
    -     * @ww.tagattribute required="false" type="org.apache.struts2.util.IteratorGenerator.Converter"
    +     * @s.tagattribute required="false" type="org.apache.struts2.util.IteratorGenerator.Converter"
          * description="the converter to convert the String entry parsed from val into an object"
          */
         public void setConverter(String aConverter) {
    @@ -170,7 +171,7 @@ public class IteratorGeneratorTag extends StrutsBodyTagSupport {
         }
     
         /**
    -     * @ww.tagattribute required="false" type="String"
    +     * @s.tagattribute required="false" type="String"
          * description="the id to store the resultant iterator into page context, if such id is supplied"
          */
         public void setId(String string) {
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/iterator/MergeIteratorTag.java b/core/src/main/java/org/apache/struts2/views/jsp/iterator/MergeIteratorTag.java
    index ce384b9e0..929f7b2ad 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/iterator/MergeIteratorTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/iterator/MergeIteratorTag.java
    @@ -17,15 +17,14 @@
      */
     package org.apache.struts2.views.jsp.iterator;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.MergeIterator;
     import org.apache.struts2.views.jsp.ComponentTagSupport;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * Append a list of iterators. The values of the iterators will be merged
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/iterator/SortIteratorTag.java b/core/src/main/java/org/apache/struts2/views/jsp/iterator/SortIteratorTag.java
    index a89a82231..a37a972b0 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/iterator/SortIteratorTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/iterator/SortIteratorTag.java
    @@ -17,14 +17,14 @@
      */
     package org.apache.struts2.views.jsp.iterator;
     
    -import java.util.Comparator;
    -
    -import javax.servlet.jsp.JspException;
    -
     import org.apache.struts2.util.MakeIterator;
     import org.apache.struts2.util.SortIteratorFilter;
     import org.apache.struts2.views.jsp.StrutsBodyTagSupport;
     
    +import javax.servlet.jsp.JspException;
    +
    +import java.util.Comparator;
    +
     
     /**
      * 
    @@ -55,15 +55,15 @@ import org.apache.struts2.views.jsp.StrutsBodyTagSupport;
      * 
      *
      * USAGE 1:
    - * <a:sort comparator="myComparator" source="myList">
    - *      <a:iterator>
    + * <s:sort comparator="myComparator" source="myList">
    + *      <s:iterator>
      * 		<!-- do something with each sorted elements -->
    - * 		<a:property value="..." />
    - *      </a:iterator>
    - * </a:sort>
    + * 		<s:property value="..." />
    + *      </s:iterator>
    + * </s:sort>
      *
      * USAGE 2:
    - * <a:sort id="mySortedList" comparator="myComparator" source="myList" />
    + * <s:sort id="mySortedList" comparator="myComparator" source="myList" />
      *
      * <%
      *    Iterator sortedIterator = (Iterator) pageContext.getAttribute("mySortedList");
    @@ -78,7 +78,7 @@ import org.apache.struts2.views.jsp.StrutsBodyTagSupport;
      *
      * @see org.apache.struts2.util.SortIteratorFilter
      *
    - * @ww.tag name="sort" tld-body-content="JSP"
    + * @s.tag name="sort" tld-body-content="JSP"
      * description="Sort a List using a Comparator both passed in as the tag attribute."
      */
     public class SortIteratorTag extends StrutsBodyTagSupport {
    @@ -91,7 +91,7 @@ public class SortIteratorTag extends StrutsBodyTagSupport {
         SortIteratorFilter sortIteratorFilter = null;
     
         /**
    -     * @ww.tagattribute required="true" type="java.util.Comparator"
    +     * @s.tagattribute required="true" type="java.util.Comparator"
          * description="The comparator to use"
          */
         public void setComparator(String comparator) {
    @@ -99,7 +99,7 @@ public class SortIteratorTag extends StrutsBodyTagSupport {
         }
     
         /**
    -     * @ww.tagattribute required="false"
    +     * @s.tagattribute required="false"
          * description="The iterable source to sort"
          */
         public void setSource(String source) {
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionErrorTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionErrorTag.java
    index 673b8a238..d5fe30443 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionErrorTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionErrorTag.java
    @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse;
     
     import org.apache.struts2.components.ActionError;
     import org.apache.struts2.components.Component;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
     /**
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionMessageTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionMessageTag.java
    index e1b19ab3d..d08fe9ff1 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionMessageTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/ActionMessageTag.java
    @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse;
     
     import org.apache.struts2.components.ActionMessage;
     import org.apache.struts2.components.Component;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
     /**
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/AnchorTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/AnchorTag.java
    index 3115d822e..9e97a6192 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/AnchorTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/AnchorTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    +import org.apache.struts2.components.Component;
    +import org.apache.struts2.components.Anchor;
    +import com.opensymphony.xwork2.util.OgnlValueStack;
    +
     import javax.servlet.http.HttpServletRequest;
     import javax.servlet.http.HttpServletResponse;
     
    -import org.apache.struts2.components.Anchor;
    -import org.apache.struts2.components.Component;
    -
    -import com.opensymphony.xwork2.util.OgnlValueStack;
    -
     /**
      * @see Anchor
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxListTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxListTag.java
    index 42648427e..5ad2c25d3 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxListTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxListTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.CheckboxList;
     import org.apache.struts2.components.Component;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see CheckboxList
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxTag.java
    index 533bf1474..a4a9ae1c8 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/CheckboxTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Checkbox;
     import org.apache.struts2.components.Component;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see Checkbox
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/ComboBoxTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/ComboBoxTag.java
    index 23144032b..2fc985a28 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/ComboBoxTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/ComboBoxTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.ComboBox;
     import org.apache.struts2.components.Component;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see ComboBox
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/ComponentTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/ComponentTag.java
    index 40c096be3..b0fc15047 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/ComponentTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/ComponentTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.GenericUIBean;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see GenericUIBean
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java
    index 1167d1673..48e178ae1 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/DatePickerTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.DatePicker;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see DatePicker
      */
    @@ -65,7 +64,7 @@ public class DatePickerTag extends TextFieldTag {
         }
         
         public void setTemplateCssPath(String templateCsspath) {
    -    	this.templateCssPath = templateCsspath;
    +    	this.templateCssPath = templateCssPath;
         }
     
     }
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/DivTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/DivTag.java
    index 69d2199d6..41bfed5d9 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/DivTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/DivTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Div;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     public class DivTag extends AbstractClosingTag {
     	
     	private static final long serialVersionUID = 5309231035916461758L;
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/DoubleSelectTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/DoubleSelectTag.java
    index 8a733f3a5..3e47d2103 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/DoubleSelectTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/DoubleSelectTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.DoubleSelect;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see DoubleSelect
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/FieldErrorTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/FieldErrorTag.java
    index d58e067c2..636d7da42 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/FieldErrorTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/FieldErrorTag.java
    @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse;
     
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.FieldError;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
     /**
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/FileTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/FileTag.java
    index 7ba622ec1..9b5f4817c 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/FileTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/FileTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.File;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see File
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/FormTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/FormTag.java
    index 2cd560205..6e9a81e48 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/FormTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/FormTag.java
    @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse;
     
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Form;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
     
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/HeadTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/HeadTag.java
    index 1c4d56220..d381c85d9 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/HeadTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/HeadTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Head;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see Head
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/HiddenTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/HiddenTag.java
    index 55ef03881..60079961c 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/HiddenTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/HiddenTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Hidden;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see Hidden
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/LabelTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/LabelTag.java
    index 52bf05934..c01d61f08 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/LabelTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/LabelTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Label;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see Label
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java
    index f94b412b0..5035135b6 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java
    @@ -17,11 +17,10 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    +import com.opensymphony.xwork2.util.OgnlUtil;
     import ognl.Ognl;
     import ognl.OgnlException;
     
    -import com.opensymphony.xwork2.util.OgnlUtil;
    -
     
     /**
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/OptGroupTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/OptGroupTag.java
    index 82a7a5048..f01f3810b 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/OptGroupTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/OptGroupTag.java
    @@ -23,7 +23,6 @@ import javax.servlet.http.HttpServletResponse;
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.OptGroup;
     import org.apache.struts2.views.jsp.ComponentTagSupport;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
     /**
    @@ -36,6 +35,8 @@ public class OptGroupTag extends ComponentTagSupport {
     	protected String list;
     	protected String label;
     	protected String disabled;
    +	protected String listKey;
    +	protected String listValue;
     	
     	public Component getBean(OgnlValueStack stack, HttpServletRequest req, HttpServletResponse res) {
     		return new OptGroup(stack, req, res);
    @@ -48,6 +49,8 @@ public class OptGroupTag extends ComponentTagSupport {
     		optGroup.setList(list);
     		optGroup.setLabel(label);
     		optGroup.setDisabled(disabled);
    +		optGroup.setListKey(listKey);
    +		optGroup.setListValue(listValue);
     	}
     	
     	public void setList(String list) {
    @@ -61,4 +64,12 @@ public class OptGroupTag extends ComponentTagSupport {
     	public void setDisabled(String disabled) {
     		this.disabled = disabled;
     	}
    +	
    +	public void setListKey(String listKey) {
    +		this.listKey = listKey;
    +	}
    +
    +	public void setListValue(String listValue) {
    +		this.listValue = listValue;
    +	}
     }
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/OptionTransferSelectTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/OptionTransferSelectTag.java
    index 4944f5e7f..e42812339 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/OptionTransferSelectTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/OptionTransferSelectTag.java
    @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse;
     
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.OptionTransferSelect;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
     /**
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/PanelTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/PanelTag.java
    index 3600cbfe5..c5c85b872 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/PanelTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/PanelTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Panel;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see Panel
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/PasswordTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/PasswordTag.java
    index 76d9fb178..94a952e95 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/PasswordTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/PasswordTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Password;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see Password
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/RadioTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/RadioTag.java
    index e958ba5da..f250a2498 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/RadioTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/RadioTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Radio;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see Radio
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/ResetTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/ResetTag.java
    index 167681ca2..9f05a0ae9 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/ResetTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/ResetTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Reset;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see org.apache.struts2.components.Reset
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/SelectTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/SelectTag.java
    index fcecc374f..5c53f46e0 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/SelectTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/SelectTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Select;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see Select
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/SubmitTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/SubmitTag.java
    index bcbe40cbb..11bfbb1d8 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/SubmitTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/SubmitTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Submit;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see Submit
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/TabbedPanelTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/TabbedPanelTag.java
    index 3fe1b980b..d23af42cc 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/TabbedPanelTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/TabbedPanelTag.java
    @@ -17,17 +17,15 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import java.util.List;
    -
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Panel;
     import org.apache.struts2.components.TabbedPanel;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +import java.util.List;
    +
     /**
      * @see TabbedPanel
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/TextFieldTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/TextFieldTag.java
    index 8dda23162..098704a50 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/TextFieldTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/TextFieldTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.TextField;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see TextField
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/TextareaTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/TextareaTag.java
    index 91b0b0a02..65d2cebd9 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/TextareaTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/TextareaTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.TextArea;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see TextArea
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/TokenTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/TokenTag.java
    index 68a1edd3a..5d556a6d9 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/TokenTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/TokenTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Token;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see Token
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeNodeTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeNodeTag.java
    index 016f32ec4..4283324b7 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeNodeTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeNodeTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.TreeNode;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see TreeNode
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeTag.java
    index 3333025ba..1ee5583a1 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/TreeTag.java
    @@ -17,14 +17,13 @@
      */
     package org.apache.struts2.views.jsp.ui;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.Tree;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     /**
      * @see Tree
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/UpDownSelectTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/UpDownSelectTag.java
    index d5a55fe72..6051cfb3f 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/UpDownSelectTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/UpDownSelectTag.java
    @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse;
     
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.UpDownSelect;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
     /**
    diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/table/WebTableTag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/table/WebTableTag.java
    index 01d8d74a4..07549b34d 100644
    --- a/core/src/main/java/org/apache/struts2/views/jsp/ui/table/WebTableTag.java
    +++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/table/WebTableTag.java
    @@ -17,15 +17,14 @@
      */
     package org.apache.struts2.views.jsp.ui.table;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
     import org.apache.struts2.components.Component;
     import org.apache.struts2.components.table.WebTable;
     import org.apache.struts2.views.jsp.ui.ComponentTag;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
     
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
     
     /**
      * @see WebTable
    diff --git a/core/src/main/java/org/apache/struts2/views/tiles/TilesResult.java b/core/src/main/java/org/apache/struts2/views/tiles/TilesResult.java
    index 3510e137e..5a62b4ecb 100644
    --- a/core/src/main/java/org/apache/struts2/views/tiles/TilesResult.java
    +++ b/core/src/main/java/org/apache/struts2/views/tiles/TilesResult.java
    @@ -17,26 +17,19 @@
      */
     package org.apache.struts2.views.tiles;
     
    -import java.util.Locale;
    +import org.apache.struts2.ServletActionContext;
    +import org.apache.struts2.dispatcher.ServletDispatcherResult;
    +import com.opensymphony.xwork2.ActionInvocation;
    +import com.opensymphony.xwork2.LocaleProvider;
    +import org.apache.commons.logging.Log;
    +import org.apache.commons.logging.LogFactory;
    +import org.apache.tiles.*;
     
     import javax.servlet.ServletContext;
     import javax.servlet.ServletException;
     import javax.servlet.http.HttpServletRequest;
     import javax.servlet.http.HttpServletResponse;
    -
    -import org.apache.commons.logging.Log;
    -import org.apache.commons.logging.LogFactory;
    -import org.apache.struts2.ServletActionContext;
    -import org.apache.struts2.dispatcher.ServletDispatcherResult;
    -import org.apache.tiles.ComponentContext;
    -import org.apache.tiles.ComponentDefinition;
    -import org.apache.tiles.ComponentDefinitions;
    -import org.apache.tiles.Controller;
    -import org.apache.tiles.DefinitionsFactory;
    -import org.apache.tiles.TilesUtilImpl;
    -
    -import com.opensymphony.xwork2.ActionInvocation;
    -import com.opensymphony.xwork2.LocaleProvider;
    +import java.util.Locale;
     
     /**
      * 
    @@ -44,36 +37,38 @@ import com.opensymphony.xwork2.LocaleProvider;
      * 
      *
      * 
    - * In your web.xml file, you need to add a servlet entry for TilesServlet to load the tiles definitions into the ServletContext.
    + * In your web.xml file, you need to add a servlet entry for TilesServlet to load the tiles
    + * definitions into the ServletContext.
      *
    - * 
    - *      tiles
    - *      org.apache.tiles.servlets.TilesServlet
    - *      
    - *          definitions-config
    - *          /WEB-INF/tiles-config.xml
    - *      
    - *      1
    - * 
    + * <servlet>
    + *      <servlet-name>tiles</servlet-name>
    + *      <servlet-class>org.apache.tiles.servlets.TilesServlet</servlet-class>
    + *      <init-param>
    + *          <param-name>definitions-config</param-name>
    + *          <param-value>/WEB-INF/tiles-config.xml</param-value>
    + *      </init-param>
    + *      <load-on-startup>1</load-on-startup>
    + * </servlet>
      * 
      *
    - * 
    - * In struts.xml, use type="tiles" on your .
    + * 
    + * In struts.xml, use type="tiles" on your <result>.
      *
    - * 
    - *      userForm
    - *      userList
    - * 
    - * 
    + * <action name="editUser" class="userAction" method="edit">
    + *      <result name="success" type="tiles">userForm</result>
    + *      <result name="input" type="tiles">userList</result>
    + * </action>
    + * 
      *
      *
      * 
      *
      * Making this result type the default for the current package.
      *
    - * 
    - *      
    - * 
    + * <result-types>
    + *      <result-type name="tiles"
    + * class="org.apache.struts2.views.tiles.TilesResult" default="true" />
    + * </result-types>
      * 
      *
      */
    diff --git a/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java b/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java
    index 2fcb21931..aab17022b 100644
    --- a/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java
    +++ b/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java
    @@ -17,29 +17,27 @@
      */
     package org.apache.struts2.views.util;
     
    -import java.util.HashMap;
    -import java.util.Map;
    +import com.opensymphony.xwork2.util.OgnlValueStack;
    +import com.opensymphony.xwork2.ActionInvocation;
    +import com.opensymphony.xwork2.ActionContext;
    +import org.apache.struts2.views.jsp.ui.OgnlTool;
    +import org.apache.struts2.config.Settings;
    +import org.apache.struts2.util.StrutsUtil;
    +import org.apache.struts2.StrutsConstants;
     
     import javax.servlet.http.HttpServletRequest;
     import javax.servlet.http.HttpServletResponse;
    -
    -import org.apache.struts2.StrutsConstants;
    -import org.apache.struts2.config.Settings;
    -import org.apache.struts2.util.StrutsUtil;
    -import org.apache.struts2.views.jsp.ui.OgnlTool;
    -
    -import com.opensymphony.xwork2.ActionContext;
    -import com.opensymphony.xwork2.ActionInvocation;
    -import com.opensymphony.xwork2.util.OgnlValueStack;
    +import java.util.HashMap;
    +import java.util.Map;
     
     /**
      * Value Stack's Context related Utilities.
      * 
      */
     public class ContextUtil {
    -    public static final String REQUEST = "req";
    +    public static final String REQUEST = "request";
         public static final String REQUEST2 = "request";
    -    public static final String RESPONSE = "res";
    +    public static final String RESPONSE = "response";
         public static final String RESPONSE2 = "response";
         public static final String SESSION = "session";
         public static final String BASE = "base";
    @@ -74,7 +72,7 @@ public class ContextUtil {
          */
         public static boolean isUseAltSyntax(Map context) {
             // We didn't make altSyntax static cause, if so, struts.configuration.xml.reload will not work
    -        // plus the Configuration implementation should cache the properties, which WW's
    +        // plus the Configuration implementation should cache the properties, which the framework's
             // configuration implementation does
             boolean altSyntax = "true".equals(Settings.get(StrutsConstants.STRUTS_TAG_ALTSYNTAX));
             return altSyntax ||(
    diff --git a/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java b/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
    index e31216c62..14a40345c 100644
    --- a/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
    +++ b/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
    @@ -17,6 +17,18 @@
      */
     package org.apache.struts2.views.util;
     
    +import org.apache.struts2.ServletActionContext;
    +import org.apache.struts2.StrutsConstants;
    +import org.apache.struts2.config.Settings;
    +import com.opensymphony.xwork2.ActionContext;
    +import com.opensymphony.xwork2.util.OgnlValueStack;
    +import com.opensymphony.xwork2.util.TextParseUtil;
    +import com.opensymphony.xwork2.util.XWorkContinuationConfig;
    +import org.apache.commons.logging.Log;
    +import org.apache.commons.logging.LogFactory;
    +
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
     import java.io.UnsupportedEncodingException;
     import java.net.URLDecoder;
     import java.net.URLEncoder;
    @@ -25,20 +37,6 @@ import java.util.Iterator;
     import java.util.LinkedHashMap;
     import java.util.Map;
     
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
    -import org.apache.commons.logging.Log;
    -import org.apache.commons.logging.LogFactory;
    -import org.apache.struts2.ServletActionContext;
    -import org.apache.struts2.StrutsConstants;
    -import org.apache.struts2.config.Settings;
    -
    -import com.opensymphony.xwork2.ActionContext;
    -import com.opensymphony.xwork2.util.OgnlValueStack;
    -import com.opensymphony.xwork2.util.TextParseUtil;
    -import com.opensymphony.xwork2.util.XWorkContinuationConfig;
    -
     
     /**
      * UrlHelper
    @@ -269,18 +267,20 @@ public class UrlHelper {
         	if (queryString != null) {
         		String[] params = queryString.split("&");
         		for (int a=0; a< params.length; a++) {
    -    			String[] tmpParams = params[a].split("=");
    -    			String paramName = null;
    -    			String paramValue = "";
    -    			if (tmpParams.length > 0) {
    -    				paramName = tmpParams[0];
    -    			}
    -    			if (tmpParams.length > 1) {
    -    				paramValue = tmpParams[1];
    -    			}
    -    			if (paramName != null) {
    -    				String translatedParamValue = translateAndDecode(paramValue);
    -    				queryParams.put(paramName, translatedParamValue);
    +    			if (params[a].trim().length() > 0) {
    +    				String[] tmpParams = params[a].split("=");
    +    				String paramName = null;
    +    				String paramValue = "";
    +    				if (tmpParams.length > 0) {
    +    					paramName = tmpParams[0];
    +    				}
    +    				if (tmpParams.length > 1) {
    +    					paramValue = tmpParams[1];
    +    				}
    +    				if (paramName != null) {
    +    					String translatedParamValue = translateAndDecode(paramValue);
    +    					queryParams.put(paramName, translatedParamValue);
    +    				}
         			}
         		}
         	}
    diff --git a/core/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java b/core/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java
    index 59c909927..087a78238 100644
    --- a/core/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java
    +++ b/core/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java
    @@ -17,12 +17,12 @@
      */
     package org.apache.struts2.views.velocity;
     
    -import java.io.InputStream;
    -
     import org.apache.struts2.util.ClassLoaderUtils;
     import org.apache.velocity.exception.ResourceNotFoundException;
     import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
     
    +import java.io.InputStream;
    +
     
     /**
      * Loads resource from the Thread's context ClassLoader.
    diff --git a/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java b/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
    index 2124dd525..b57927fcd 100644
    --- a/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
    +++ b/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
    @@ -17,19 +17,14 @@
      */
     package org.apache.struts2.views.velocity;
     
    -import org.apache.velocity.VelocityContext;
    -
     import com.opensymphony.xwork2.util.OgnlValueStack;
    +import org.apache.velocity.VelocityContext;
     
     
     /**
      */
     public class StrutsVelocityContext extends VelocityContext {
     
    -    /**
    -     * 
    -     */
    -    private static final long serialVersionUID = 8497212428904436963L;
         OgnlValueStack stack;
         VelocityContext[] chainedContexts;
     
    diff --git a/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityServlet.java b/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityServlet.java
    index 5813eaa2c..3e41d8d31 100644
    --- a/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityServlet.java
    +++ b/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityServlet.java
    @@ -17,24 +17,12 @@
      */
     package org.apache.struts2.views.velocity;
     
    -import java.io.FileNotFoundException;
    -import java.io.IOException;
    -import java.io.UnsupportedEncodingException;
    -import java.io.Writer;
    -import java.util.Properties;
    -
    -import javax.servlet.ServletConfig;
    -import javax.servlet.ServletException;
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -import javax.servlet.jsp.JspFactory;
    -import javax.servlet.jsp.PageContext;
    -
     import org.apache.struts2.RequestUtils;
     import org.apache.struts2.ServletActionContext;
     import org.apache.struts2.StrutsConstants;
     import org.apache.struts2.config.Settings;
     import org.apache.struts2.views.util.ContextUtil;
    +import com.opensymphony.xwork2.ActionContext;
     import org.apache.velocity.Template;
     import org.apache.velocity.context.Context;
     import org.apache.velocity.exception.MethodInvocationException;
    @@ -43,17 +31,23 @@ import org.apache.velocity.exception.ResourceNotFoundException;
     import org.apache.velocity.runtime.RuntimeSingleton;
     import org.apache.velocity.servlet.VelocityServlet;
     
    -import com.opensymphony.xwork2.ActionContext;
    +import javax.servlet.ServletConfig;
    +import javax.servlet.ServletException;
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +import javax.servlet.jsp.JspFactory;
    +import javax.servlet.jsp.PageContext;
    +import java.io.FileNotFoundException;
    +import java.io.IOException;
    +import java.io.UnsupportedEncodingException;
    +import java.io.Writer;
    +import java.util.Properties;
     
     
     /**
      * @deprecated please use {@link org.apache.struts2.dispatcher.VelocityResult} instead of direct access
      */
     public class StrutsVelocityServlet extends VelocityServlet {
    -    /**
    -     * 
    -     */
    -    private static final long serialVersionUID = -2078492831396251182L;
         private VelocityManager velocityManager;
     
         public StrutsVelocityServlet() {
    diff --git a/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java b/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
    index de1c41138..cc5423f3a 100644
    --- a/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
    +++ b/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
    @@ -17,23 +17,6 @@
      */
     package org.apache.struts2.views.velocity;
     
    -import java.io.File;
    -import java.io.FileInputStream;
    -import java.io.IOException;
    -import java.io.InputStream;
    -import java.util.ArrayList;
    -import java.util.Iterator;
    -import java.util.List;
    -import java.util.Map;
    -import java.util.Properties;
    -import java.util.StringTokenizer;
    -
    -import javax.servlet.ServletContext;
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
    -import org.apache.commons.logging.Log;
    -import org.apache.commons.logging.LogFactory;
     import org.apache.struts2.ServletActionContext;
     import org.apache.struts2.StrutsConstants;
     import org.apache.struts2.StrutsException;
    @@ -41,48 +24,12 @@ import org.apache.struts2.config.Settings;
     import org.apache.struts2.util.VelocityStrutsUtil;
     import org.apache.struts2.views.jsp.ui.OgnlTool;
     import org.apache.struts2.views.util.ContextUtil;
    -import org.apache.struts2.views.velocity.components.ActionDirective;
    -import org.apache.struts2.views.velocity.components.ActionErrorDirective;
    -import org.apache.struts2.views.velocity.components.ActionMessageDirective;
    -import org.apache.struts2.views.velocity.components.AnchorDirective;
    -import org.apache.struts2.views.velocity.components.BeanDirective;
    -import org.apache.struts2.views.velocity.components.CheckBoxDirective;
    -import org.apache.struts2.views.velocity.components.CheckBoxListDirective;
    -import org.apache.struts2.views.velocity.components.ComboBoxDirective;
    -import org.apache.struts2.views.velocity.components.ComponentDirective;
    -import org.apache.struts2.views.velocity.components.DateDirective;
    -import org.apache.struts2.views.velocity.components.DatePickerDirective;
    -import org.apache.struts2.views.velocity.components.DivDirective;
    -import org.apache.struts2.views.velocity.components.DoubleSelectDirective;
    -import org.apache.struts2.views.velocity.components.FieldErrorDirective;
    -import org.apache.struts2.views.velocity.components.FileDirective;
    -import org.apache.struts2.views.velocity.components.FormDirective;
    -import org.apache.struts2.views.velocity.components.HeadDirective;
    -import org.apache.struts2.views.velocity.components.HiddenDirective;
    -import org.apache.struts2.views.velocity.components.I18nDirective;
    -import org.apache.struts2.views.velocity.components.IncludeDirective;
    -import org.apache.struts2.views.velocity.components.LabelDirective;
    -import org.apache.struts2.views.velocity.components.OptionTransferSelectDirective;
    -import org.apache.struts2.views.velocity.components.PanelDirective;
    -import org.apache.struts2.views.velocity.components.ParamDirective;
    -import org.apache.struts2.views.velocity.components.PasswordDirective;
    -import org.apache.struts2.views.velocity.components.PropertyDirective;
    -import org.apache.struts2.views.velocity.components.PushDirective;
    -import org.apache.struts2.views.velocity.components.RadioDirective;
    -import org.apache.struts2.views.velocity.components.ResetDirective;
    -import org.apache.struts2.views.velocity.components.SelectDirective;
    -import org.apache.struts2.views.velocity.components.SetDirective;
    -import org.apache.struts2.views.velocity.components.SubmitDirective;
    -import org.apache.struts2.views.velocity.components.TabbedPanelDirective;
    -import org.apache.struts2.views.velocity.components.TextAreaDirective;
    -import org.apache.struts2.views.velocity.components.TextDirective;
    -import org.apache.struts2.views.velocity.components.TextFieldDirective;
    -import org.apache.struts2.views.velocity.components.TokenDirective;
    -import org.apache.struts2.views.velocity.components.TreeDirective;
    -import org.apache.struts2.views.velocity.components.TreeNodeDirective;
    -import org.apache.struts2.views.velocity.components.URLDirective;
    -import org.apache.struts2.views.velocity.components.UpDownSelectDirective;
    -import org.apache.struts2.views.velocity.components.WebTableDirective;
    +import org.apache.struts2.views.velocity.components.*;
    +
    +import com.opensymphony.xwork2.ObjectFactory;
    +import com.opensymphony.xwork2.util.OgnlValueStack;
    +import org.apache.commons.logging.Log;
    +import org.apache.commons.logging.LogFactory;
     import org.apache.velocity.VelocityContext;
     import org.apache.velocity.app.Velocity;
     import org.apache.velocity.app.VelocityEngine;
    @@ -91,8 +38,14 @@ import org.apache.velocity.tools.view.ToolboxManager;
     import org.apache.velocity.tools.view.context.ChainedContext;
     import org.apache.velocity.tools.view.servlet.ServletToolboxManager;
     
    -import com.opensymphony.xwork2.ObjectFactory;
    -import com.opensymphony.xwork2.util.OgnlValueStack;
    +import javax.servlet.ServletContext;
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +import java.io.File;
    +import java.io.FileInputStream;
    +import java.io.IOException;
    +import java.io.InputStream;
    +import java.util.*;
     
     
     /**
    @@ -175,8 +128,8 @@ public class VelocityManager {
          * following context parameters are defined:
          * 

    *

      - *
    • req - the current HttpServletRequest
    • - *
    • res - the current HttpServletResponse
    • + *
    • request - the current HttpServletRequest
    • + *
    • response - the current HttpServletResponse
    • *
    • stack - the current {@link OgnlValueStack}
    • *
    • ognl - an {@link OgnlTool}
    • *
    • struts - an instance of {@link org.apache.struts2.util.StrutsUtil}
    • @@ -523,30 +476,30 @@ public class VelocityManager { * Ben Hall (22/08/2003) */ if (p.getProperty(Velocity.RESOURCE_LOADER) == null) { - p.setProperty(Velocity.RESOURCE_LOADER, "saffile, safclass"); + p.setProperty(Velocity.RESOURCE_LOADER, "strutsfile, strutsclass"); } /** - * If there's a "real" path add it for the saffile resource loader. + * If there's a "real" path add it for the strutsfile resource loader. * If there's no real path and they haven't configured a loader then we change - * resource loader property to just use the safclass loader + * resource loader property to just use the strutsclass loader * Ben Hall (22/08/2003) */ if (context.getRealPath("") != null) { - p.setProperty("saffile.resource.loader.description", "Velocity File Resource Loader"); - p.setProperty("saffile.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader"); - p.setProperty("saffile.resource.loader.path", context.getRealPath("")); - p.setProperty("saffile.resource.loader.modificationCheckInterval", "2"); - p.setProperty("saffile.resource.loader.cache", "true"); + p.setProperty("strutsfile.resource.loader.description", "Velocity File Resource Loader"); + p.setProperty("strutsfile.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader"); + p.setProperty("strutsfile.resource.loader.path", context.getRealPath("")); + p.setProperty("strutsfile.resource.loader.modificationCheckInterval", "2"); + p.setProperty("strutsfile.resource.loader.cache", "true"); } else { - // remove saffile from resource loader property + // remove strutsfile from resource loader property String prop = p.getProperty(Velocity.RESOURCE_LOADER); - if (prop.indexOf("saffile,") != -1) { - prop = replace(prop, "saffile,", ""); - } else if (prop.indexOf(", saffile") != -1) { - prop = replace(prop, ", saffile", ""); - } else if (prop.indexOf("saffile") != -1) { - prop = replace(prop, "saffile", ""); + if (prop.indexOf("strutsfile,") != -1) { + prop = replace(prop, "strutsfile,", ""); + } else if (prop.indexOf(", strutsfile") != -1) { + prop = replace(prop, ", strutsfile", ""); + } else if (prop.indexOf("strutsfile") != -1) { + prop = replace(prop, "strutsfile", ""); } p.setProperty(Velocity.RESOURCE_LOADER, prop); @@ -558,10 +511,10 @@ public class VelocityManager { * Unfortunately, there does not appear to be a macro for the class loader keywords * Matt Ho - Mon Mar 17 00:21:46 PST 2003 */ - p.setProperty("safclass.resource.loader.description", "Velocity Classpath Resource Loader"); - p.setProperty("safclass.resource.loader.class", "org.apache.struts2.views.velocity.StrutsResourceLoader"); - p.setProperty("safclass.resource.loader.modificationCheckInterval", "2"); - p.setProperty("safclass.resource.loader.cache", "true"); + p.setProperty("strutsclass.resource.loader.description", "Velocity Classpath Resource Loader"); + p.setProperty("strutsclass.resource.loader.class", "org.apache.struts2.views.velocity.StrutsResourceLoader"); + p.setProperty("strutsclass.resource.loader.modificationCheckInterval", "2"); + p.setProperty("strutsclass.resource.loader.cache", "true"); // components StringBuffer sb = new StringBuffer(); diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java index ba5396ce8..d4b84f629 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java @@ -17,16 +17,9 @@ */ package org.apache.struts2.views.velocity.components; -import java.io.IOException; -import java.io.Writer; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.ServletActionContext; import org.apache.struts2.components.Component; +import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.velocity.context.InternalContextAdapter; import org.apache.velocity.exception.MethodInvocationException; import org.apache.velocity.exception.ParseErrorException; @@ -34,11 +27,16 @@ import org.apache.velocity.exception.ResourceNotFoundException; import org.apache.velocity.runtime.directive.Directive; import org.apache.velocity.runtime.parser.node.Node; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.Writer; +import java.util.HashMap; +import java.util.Map; public abstract class AbstractDirective extends Directive { public String getName() { - return "saf" + getBeanName(); + return "s" + getBeanName(); } public abstract String getBeanName(); diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java index cba295fc1..e329baef0 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.ActionComponent; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see ActionComponent */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java index 2000c9b3c..3f3b23b84 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; +import org.apache.struts2.components.Component; +import org.apache.struts2.components.ActionError; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.struts2.components.ActionError; -import org.apache.struts2.components.Component; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * @see ActionError */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java index a0703bf8a..2a748f34e 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; +import org.apache.struts2.components.Component; +import org.apache.struts2.components.ActionMessage; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.struts2.components.ActionMessage; -import org.apache.struts2.components.Component; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * @see ActionMessage */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java index 5d51fb8f2..a1d0b9675 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; +import org.apache.struts2.components.Component; +import org.apache.struts2.components.Anchor; +import com.opensymphony.xwork2.util.OgnlValueStack; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.struts2.components.Anchor; -import org.apache.struts2.components.Component; - -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * @see Anchor */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java index b6cfaa341..10a85333a 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Bean; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Bean */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java index 38e46dd9e..3dac69cb5 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Checkbox; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Checkbox */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java index f514d79ea..53fa77b6a 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.CheckboxList; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see CheckboxList */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java index 19eab8e40..c80e37d21 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.ComboBox; import org.apache.struts2.components.Component; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see ComboBox */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java index 3ca49de83..28c61bda6 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.GenericUIBean; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see GenericUIBean */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java index a0d18ba55..73eee28f0 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Date; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * DateDirective */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/DatePickerDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/DatePickerDirective.java index c3ac9cb7a..6248cee0a 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/DatePickerDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/DatePickerDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.DatePicker; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see DatePicker */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/DivDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/DivDirective.java index 34bc61708..42f78d3a5 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/DivDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/DivDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Div; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Div */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java index c4f2f8f4b..e4e6a2d9a 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.DoubleSelect; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see DoubleSelect */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java index ebea4d25e..86e7ee654 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.FieldError; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see FieldError */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java index d9ac2f922..5474ca93e 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.File; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see File */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java index c7c954e34..a8123fabf 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Form; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Form */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java index 6dd731f64..2d26142b4 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Head; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Head */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java index 11ba0c3cb..aba80a3e8 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Hidden; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Hidden */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java index 2b9f6d03b..19d0b7622 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.I18n; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see I18n */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java index a3b92ace2..267be33d0 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Include; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Include */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java index edd143e96..a709e2e6b 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Label; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Label */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java index 4a51a967e..2e23a419b 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.struts2.components.Component; import org.apache.struts2.components.OptGroup; - import com.opensymphony.xwork2.util.OgnlValueStack; diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java index b21542d9e..44c95f673 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.struts2.components.Component; import org.apache.struts2.components.OptionTransferSelect; - import com.opensymphony.xwork2.util.OgnlValueStack; /** diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/PanelDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/PanelDirective.java index c6170d7dc..77505fc38 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/PanelDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/PanelDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Panel; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Panel */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java index abed6c8c3..e326eb803 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Param; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Param */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java index c75557709..7ea6a4589 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Password; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Password */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java index 9f7bb6198..d750b3056 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Property; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** */ public class PropertyDirective extends AbstractDirective { diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java index 8dbf464ba..03426dd85 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Push; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Push */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java index dfc0dc68a..27574d52e 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Radio; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Radio */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java index ae6a122a7..d90f2f6f6 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Reset; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see org.apache.struts2.components.Reset */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java index cb39df148..2ffa853e7 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Select; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Select */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java index c1afc411e..a81c05809 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Set; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Set */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java index 29e15810d..c67c60fba 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Submit; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Submit */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TabbedPanelDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/TabbedPanelDirective.java index 08615b47d..ccf93a2ac 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/TabbedPanelDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/TabbedPanelDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.TabbedPanel; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see TabbedPanel */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java index df6d4c967..c9e0653b0 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.TextArea; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see TextArea */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java index fc07d3563..1774db520 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Text; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Text */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java index f5e4ea855..163b73393 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.TextField; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see TextField */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java index 35fcf770a..5d61fa0d1 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Token; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see Token */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TreeDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/TreeDirective.java index 0c290b004..909236c72 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/TreeDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/TreeDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.Tree; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * TreeDirective * @see Tree diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TreeNodeDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/TreeNodeDirective.java index aafa94a87..03e5b243c 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/TreeNodeDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/TreeNodeDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.TreeNode; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * TreeNodeDirective * @see TreeNode diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java index ffe4f2def..d17b779a1 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.URL; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see URL */ diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java index ecd5c6580..c54342efc 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.struts2.components.Component; import org.apache.struts2.components.UpDownSelect; - import com.opensymphony.xwork2.util.OgnlValueStack; /** diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/WebTableDirective.java b/core/src/main/java/org/apache/struts2/views/velocity/components/WebTableDirective.java index 695a13e04..2963e6272 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/components/WebTableDirective.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/components/WebTableDirective.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.velocity.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.components.Component; import org.apache.struts2.components.table.WebTable; - import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @see WebTable */ diff --git a/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterElement.java b/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterElement.java index e599536fa..c75425dfa 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterElement.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterElement.java @@ -17,14 +17,10 @@ */ package org.apache.struts2.views.xslt; -import java.util.HashMap; -import java.util.Map; +import org.w3c.dom.*; -import org.w3c.dom.Attr; -import org.w3c.dom.DOMException; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.TypeInfo; +import java.util.Map; +import java.util.HashMap; /** * AbstractAdapterElement extends the abstract Node type and implements diff --git a/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterNode.java b/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterNode.java index d781e4f5b..3016a2735 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterNode.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/AbstractAdapterNode.java @@ -17,19 +17,14 @@ */ package org.apache.struts2.views.xslt; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - +import org.w3c.dom.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.StrutsException; -import org.w3c.dom.DOMException; -import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.UserDataHandler; + +import java.util.List; +import java.util.ArrayList; +import java.util.LinkedList; /** * AbstractAdapterNode is the base for childAdapters that expose a read-only view diff --git a/core/src/main/java/org/apache/struts2/views/xslt/AdapterFactory.java b/core/src/main/java/org/apache/struts2/views/xslt/AdapterFactory.java index 43f08d6d4..d721479e1 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/AdapterFactory.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/AdapterFactory.java @@ -17,17 +17,12 @@ */ package org.apache.struts2.views.xslt; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - import org.apache.struts2.StrutsException; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.Text; +import org.w3c.dom.*; + +import java.util.Map; +import java.util.HashMap; +import java.util.Collection; /** * AdapterFactory produces Node adapters for Java object types. diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ArrayAdapter.java b/core/src/main/java/org/apache/struts2/views/xslt/ArrayAdapter.java index a434d63a8..7cb2ff285 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/ArrayAdapter.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/ArrayAdapter.java @@ -17,13 +17,13 @@ */ package org.apache.struts2.views.xslt; -import java.util.ArrayList; -import java.util.List; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Node; +import java.util.ArrayList; +import java.util.List; + /** */ diff --git a/core/src/main/java/org/apache/struts2/views/xslt/BeanAdapter.java b/core/src/main/java/org/apache/struts2/views/xslt/BeanAdapter.java index 822c84d0d..f70219c6d 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/BeanAdapter.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/BeanAdapter.java @@ -17,22 +17,22 @@ */ package org.apache.struts2.views.xslt; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.struts2.StrutsException; +import org.w3c.dom.NodeList; +import org.w3c.dom.Node; + import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.StrutsException; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - /** * This class is the most general type of adapter, utilizing reflective introspection to present a DOM view of all of diff --git a/core/src/main/java/org/apache/struts2/views/xslt/CollectionAdapter.java b/core/src/main/java/org/apache/struts2/views/xslt/CollectionAdapter.java index 4fa7dc843..90260461b 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/CollectionAdapter.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/CollectionAdapter.java @@ -17,14 +17,15 @@ */ package org.apache.struts2.views.xslt; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Node; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + /** */ diff --git a/core/src/main/java/org/apache/struts2/views/xslt/MapAdapter.java b/core/src/main/java/org/apache/struts2/views/xslt/MapAdapter.java index 885cdbcd4..ea33febef 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/MapAdapter.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/MapAdapter.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.views.xslt; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - import org.w3c.dom.Node; +import java.util.Map; +import java.util.List; +import java.util.ArrayList; + /** * MapAdapter adapters a java.util.Map type to an XML DOM with the following * structure: diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ProxyElementAdapter.java b/core/src/main/java/org/apache/struts2/views/xslt/ProxyElementAdapter.java index 9c6e13fe7..8cf41eb59 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/ProxyElementAdapter.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/ProxyElementAdapter.java @@ -17,17 +17,12 @@ */ package org.apache.struts2.views.xslt; -import java.util.ArrayList; -import java.util.List; - +import org.w3c.dom.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Attr; -import org.w3c.dom.DOMException; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.TypeInfo; + +import java.util.List; +import java.util.ArrayList; /** * ProxyElementAdapter is a pass-through adapter for objects which already diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ProxyNamedNodeMap.java b/core/src/main/java/org/apache/struts2/views/xslt/ProxyNamedNodeMap.java index 250a2ae68..ebd3b179c 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/ProxyNamedNodeMap.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/ProxyNamedNodeMap.java @@ -17,9 +17,9 @@ */ package org.apache.struts2.views.xslt; -import org.w3c.dom.DOMException; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; +import org.w3c.dom.DOMException; /** * A NamedNodeMap that wraps the Nodes returned in their proxies. diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ProxyNodeAdapter.java b/core/src/main/java/org/apache/struts2/views/xslt/ProxyNodeAdapter.java index cfa6671f8..09be6894a 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/ProxyNodeAdapter.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/ProxyNodeAdapter.java @@ -19,9 +19,9 @@ package org.apache.struts2.views.xslt; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.w3c.dom.DOMException; -import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.DOMException; /** * ProxyNodeAdapter is a read-only delegating adapter for objects which already diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ProxyTextNodeAdapter.java b/core/src/main/java/org/apache/struts2/views/xslt/ProxyTextNodeAdapter.java index 769e0d45b..972589135 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/ProxyTextNodeAdapter.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/ProxyTextNodeAdapter.java @@ -17,8 +17,8 @@ */ package org.apache.struts2.views.xslt; -import org.w3c.dom.DOMException; import org.w3c.dom.Text; +import org.w3c.dom.DOMException; /** * ProxyTextNodeAdapter is a pass-through adapter for objects which already diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ServletURIResolver.java b/core/src/main/java/org/apache/struts2/views/xslt/ServletURIResolver.java index 103da6d2b..c6d86c399 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/ServletURIResolver.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/ServletURIResolver.java @@ -17,20 +17,19 @@ */ package org.apache.struts2.views.xslt; -import java.io.InputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.servlet.ServletContext; import javax.xml.transform.Source; import javax.xml.transform.TransformerException; import javax.xml.transform.URIResolver; import javax.xml.transform.stream.StreamSource; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import java.io.InputStream; /** - * ServletURIResolver is a URIResolver that can retrieve resources from the servlet context using the scheme "res". + * ServletURIResolver is a URIResolver that can retrieve resources from the servlet context using the scheme "response". * e.g. * * A URI resolver is called when a stylesheet uses an xsl:include, xsl:import, or document() function to find the @@ -39,7 +38,7 @@ import org.apache.commons.logging.LogFactory; public class ServletURIResolver implements URIResolver { private Log log = LogFactory.getLog(getClass()); - static final String PROTOCOL = "res:"; + static final String PROTOCOL = "response:"; private ServletContext sc; diff --git a/core/src/main/java/org/apache/struts2/views/xslt/SimpleAdapterDocument.java b/core/src/main/java/org/apache/struts2/views/xslt/SimpleAdapterDocument.java index eba77dd46..17f25b184 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/SimpleAdapterDocument.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/SimpleAdapterDocument.java @@ -17,25 +17,11 @@ */ package org.apache.struts2.views.xslt; -import java.util.Arrays; -import java.util.List; - +import org.w3c.dom.*; import org.apache.struts2.StrutsException; -import org.w3c.dom.Attr; -import org.w3c.dom.CDATASection; -import org.w3c.dom.Comment; -import org.w3c.dom.DOMConfiguration; -import org.w3c.dom.DOMException; -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.Document; -import org.w3c.dom.DocumentFragment; -import org.w3c.dom.DocumentType; -import org.w3c.dom.Element; -import org.w3c.dom.EntityReference; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.ProcessingInstruction; -import org.w3c.dom.Text; + +import java.util.List; +import java.util.Arrays; /** * SimpleAdapterDocument adapted a Java object and presents it as diff --git a/core/src/main/java/org/apache/struts2/views/xslt/SimpleNodeList.java b/core/src/main/java/org/apache/struts2/views/xslt/SimpleNodeList.java index 6c27f3f33..66e305088 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/SimpleNodeList.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/SimpleNodeList.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.views.xslt; -import java.util.List; - +import org.w3c.dom.NodeList; +import org.w3c.dom.Node; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; + +import java.util.List; public class SimpleNodeList implements NodeList { diff --git a/core/src/main/java/org/apache/struts2/views/xslt/StringAdapter.java b/core/src/main/java/org/apache/struts2/views/xslt/StringAdapter.java index 019e83c1e..58fe52167 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/StringAdapter.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/StringAdapter.java @@ -17,20 +17,20 @@ */ package org.apache.struts2.views.xslt; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.ParserConfigurationException; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.StrutsException; import org.w3c.dom.Node; import org.xml.sax.SAXException; +import java.util.List; +import java.util.ArrayList; +import java.io.IOException; + import com.opensymphony.util.XMLUtils; +import javax.xml.parsers.ParserConfigurationException; + /** * StringAdapter adapts a Java String value to a DOM Element with the specified * property name containing the String's text. diff --git a/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java b/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java index 65a3c667e..134c8e6b7 100644 --- a/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java +++ b/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java @@ -17,6 +17,21 @@ */ package org.apache.struts2.views.xslt; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.config.Settings; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.Result; +import com.opensymphony.xwork2.util.OgnlValueStack; +import com.opensymphony.xwork2.util.TextParseUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.http.HttpServletResponse; +import javax.xml.transform.*; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; import java.io.IOException; import java.io.PrintWriter; import java.io.Writer; @@ -24,29 +39,6 @@ import java.net.URL; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletResponse; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Source; -import javax.xml.transform.Templates; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.URIResolver; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.config.Settings; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.Result; -import com.opensymphony.xwork2.util.OgnlValueStack; -import com.opensymphony.xwork2.util.TextParseUtil; - /** * @@ -187,10 +179,6 @@ import com.opensymphony.xwork2.util.TextParseUtil; */ public class XSLTResult implements Result { - /** - * - */ - private static final long serialVersionUID = 6424691441777176763L; private static final Log log = LogFactory.getLog(XSLTResult.class); public static final String DEFAULT_PARAM = "stylesheetLocation"; diff --git a/core/src/main/resources/config-browser/actionNames.ftl b/core/src/main/resources/config-browser/actionNames.ftl index 3abf32678..20f92d6d3 100644 --- a/core/src/main/resources/config-browser/actionNames.ftl +++ b/core/src/main/resources/config-browser/actionNames.ftl @@ -6,10 +6,10 @@
        <#list actionNames as name> - <@saf.url id="showConfig" action="showConfig" includeParams="none"> - <@saf.param name="namespace">${namespace} - <@saf.param name="actionName">${name} - + <@s.url id="showConfig" action="showConfig" includeParams="none"> + <@s.param name="namespace">${namespace} + <@s.param name="actionName">${name} +
      • ${name}
      diff --git a/core/src/main/resources/config-browser/page-header.ftl b/core/src/main/resources/config-browser/page-header.ftl index 8bbcfce8b..2305d29fb 100644 --- a/core/src/main/resources/config-browser/page-header.ftl +++ b/core/src/main/resources/config-browser/page-header.ftl @@ -27,12 +27,12 @@ -->
      <#if namespaces?exists>
      Namespaces
      - <#foreach namespace in namespaces>
      <@saf.url id="namespaceLink" action="actionNames" includeParams="none"><@saf.param name="namespace">${namespace}<#if namespace == ""> default <#else> ${namespace}
      + <#foreach namespace in namespaces>
      <@s.url id="namespaceLink" action="actionNames" includeParams="none"><@s.param name="namespace">${namespace}<#if namespace == ""> default <#else> ${namespace}
      <#if actionNames?exists>
      Actions in <#if namespace == ""> default <#else> ${namespace}
      - <#foreach name in actionNames>
      <@saf.url id="actionLink" action="showConfig" includeParams="none"><@saf.param name="namespace">${namespace}<@saf.param name="actionName">${name}${name}
      + <#foreach name in actionNames>
      <@s.url id="actionLink" action="showConfig" includeParams="none"><@s.param name="namespace">${namespace}<@s.param name="actionName">${name}${name}
      diff --git a/core/src/main/resources/config-browser/showConfig.ftl b/core/src/main/resources/config-browser/showConfig.ftl index 99dda9f24..e913998a9 100644 --- a/core/src/main/resources/config-browser/showConfig.ftl +++ b/core/src/main/resources/config-browser/showConfig.ftl @@ -19,10 +19,10 @@ -<@saf.url id="url" action="showConfig" includeParams="none"> - <@saf.param name="namespace">${namespace} - <@saf.param name="actionName">${actionName} - +<@s.url id="url" action="showConfig" includeParams="none"> + <@s.param name="namespace">${namespace} + <@s.param name="actionName">${actionName} + <#assign url = url + "&detailView="> <#assign detailsSelected = false> @@ -107,10 +107,10 @@ <#else> - <@saf.action name="showValidators" executeResult="true"> - <@saf.param name="clazz" value="'${config.className}'"/> - <@saf.param name="context" value="'${namespace}'"/> - + <@s.action name="showValidators" executeResult="true"> + <@s.param name="clazz" value="'${config.className}'"/> + <@s.param name="context" value="'${namespace}'"/> + <#call endPage> diff --git a/core/src/main/resources/config-browser/tigris-macros.ftl b/core/src/main/resources/config-browser/tigris-macros.ftl index 1b29589ce..5b2341087 100644 --- a/core/src/main/resources/config-browser/tigris-macros.ftl +++ b/core/src/main/resources/config-browser/tigris-macros.ftl @@ -70,10 +70,10 @@ ${caption}

      ${message} <#if errors?exists> - <@saf.iterator id="e" value="errors"> + <@s.iterator id="e" value="errors"> <#assign e = stack.findString('top') /> <#call error(e)> - +

      diff --git a/core/src/main/resources/org/apache/struts2/default.properties b/core/src/main/resources/org/apache/struts2/default.properties index 7f0adb857..99b692284 100644 --- a/core/src/main/resources/org/apache/struts2/default.properties +++ b/core/src/main/resources/org/apache/struts2/default.properties @@ -71,6 +71,11 @@ struts.serve.static=true ### headers) struts.serve.static.browserCache=true +### Set this to false if you wish to disable all forms of dynamic method invocation +### via the URL request. This includes URLs like foo!bar.action, as well as params +### like method:bar (but not action:foo). See the DefaultActionMapper for more info. +struts.enable.DynamicMethodInvocation = true + ### use alternative syntax that requires %{} in most places ### to evaluate expressions for String attributes for tags struts.tag.altSyntax=true @@ -91,7 +96,7 @@ struts.devMode = false ### Specifically, it allows for the "action!method" URL syntax ### that allows methods to be specified in the URL. This behavior has been ### deprecated in favor of explicit wildcards where needed. -struts.compatibilityMode = false +struts.compatibilityMode.WebWork = false ### when set to true, resource bundles will be reloaded on _every_ request. ### this is good during development, but should never be used in production diff --git a/core/src/main/resources/org/apache/struts2/dispatcher/error.ftl b/core/src/main/resources/org/apache/struts2/dispatcher/error.ftl index 4f5464e8e..c52ee815d 100644 --- a/core/src/main/resources/org/apache/struts2/dispatcher/error.ftl +++ b/core/src/main/resources/org/apache/struts2/dispatcher/error.ftl @@ -5,7 +5,7 @@

      Struts Problem Report

      - The Struts has detected an unhandled exception: + Struts has detected an unhandled exception:

      <#assign msgs = [] /> diff --git a/core/src/main/resources/org/apache/struts2/interceptor/debugging/console.ftl b/core/src/main/resources/org/apache/struts2/interceptor/debugging/console.ftl index 43968b077..14b39b5e0 100644 --- a/core/src/main/resources/org/apache/struts2/interceptor/debugging/console.ftl +++ b/core/src/main/resources/org/apache/struts2/interceptor/debugging/console.ftl @@ -1,7 +1,7 @@ diff --git a/core/src/main/resources/org/apache/struts2/interceptor/wait.ftl b/core/src/main/resources/org/apache/struts2/interceptor/wait.ftl index b0f0003bc..1d1869f84 100644 --- a/core/src/main/resources/org/apache/struts2/interceptor/wait.ftl +++ b/core/src/main/resources/org/apache/struts2/interceptor/wait.ftl @@ -1,6 +1,6 @@ - "/> + "/> Please wait while we process your request... diff --git a/core/src/main/resources/org/apache/struts2/static/dojo/dojo.js.uncompressed.js b/core/src/main/resources/org/apache/struts2/static/dojo/dojo.js.uncompressed.js index 60d3ca837..777d429c0 100644 --- a/core/src/main/resources/org/apache/struts2/static/dojo/dojo.js.uncompressed.js +++ b/core/src/main/resources/org/apache/struts2/static/dojo/dojo.js.uncompressed.js @@ -1,3476 +1,3476 @@ -/* - Copyright (c) 2004-2005, The Dojo Foundation - All Rights Reserved. - - Licensed under the Academic Free License version 2.1 or above OR the - modified BSD license. For more information on Dojo licensing, see: - - http://dojotoolkit.org/community/licensing.shtml -*/ - -/** -* @file bootstrap1.js -* -* bootstrap file that runs before hostenv_*.js file. -* -* @author Copyright 2004 Mark D. Anderson (mda@discerning.com) -* @author Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php -* -* $Id: bootstrap1.js 2836 2006-01-16 08:36:18Z alex $ -*/ - -/** - * The global djConfig can be set prior to loading the library, to override - * certain settings. It does not exist under dojo.* so that it can be set - * before the dojo variable exists. Setting any of these variables *after* the - * library has loaded does nothing at all. The variables that can be set are - * as follows: - */ - -/** - * dj_global is an alias for the top-level global object in the host - * environment (the "window" object in a browser). - */ -var dj_global = this; //typeof window == 'undefined' ? this : window; - -function dj_undef(name, obj){ - if(!obj){ obj = dj_global; } - return (typeof obj[name] == "undefined"); -} - -if(dj_undef("djConfig")){ - var djConfig = {}; -} - -/** - * dojo is the root variable of (almost all) our public symbols. - */ -var dojo; -if(dj_undef("dojo")){ dojo = {}; } - -dojo.version = { - major: 0, minor: 2, patch: 2, flag: "", - revision: Number("$Rev: 2836 $".match(/[0-9]+/)[0]), - toString: function() { - with (dojo.version) { - return major + "." + minor + "." + patch + flag + " (" + revision + ")"; - } - } -}; - -/* - * evaluate a string like "A.B" without using eval. - */ -dojo.evalObjPath = function(objpath, create){ - // fast path for no periods - if(typeof objpath != "string"){ return dj_global; } - if(objpath.indexOf('.') == -1){ - if((dj_undef(objpath, dj_global))&&(create)){ - dj_global[objpath] = {}; - } - return dj_global[objpath]; - } - - var syms = objpath.split(/\./); - var obj = dj_global; - for(var i=0;i 1) { - dojo.hostenv.modulesLoadedListeners.push(function() { - obj[fcnName](); - }); - } -}; - -dojo.hostenv.modulesLoaded = function(){ - if(this.post_load_){ return; } - if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){ - if(this.inFlightCount > 0){ - dojo.debug("files still in flight!"); - return; - } - if(typeof setTimeout == "object"){ - setTimeout("dojo.hostenv.loaded();", 0); - }else{ - dojo.hostenv.loaded(); - } - } -} - -dojo.hostenv.moduleLoaded = function(modulename){ - var modref = dojo.evalObjPath((modulename.split(".").slice(0, -1)).join('.')); - this.loaded_modules_[(new String(modulename)).toLowerCase()] = modref; -} - -/** -* loadModule("A.B") first checks to see if symbol A.B is defined. -* If it is, it is simply returned (nothing to do). -* -* If it is not defined, it will look for "A/B.js" in the script root directory, -* followed by "A.js". -* -* It throws if it cannot find a file to load, or if the symbol A.B is not -* defined after loading. -* -* It returns the object A.B. -* -* This does nothing about importing symbols into the current package. -* It is presumed that the caller will take care of that. For example, to import -* all symbols: -* -* with (dojo.hostenv.loadModule("A.B")) { -* ... -* } -* -* And to import just the leaf symbol: -* -* var B = dojo.hostenv.loadModule("A.B"); -* ... -* -* dj_load is an alias for dojo.hostenv.loadModule -*/ -dojo.hostenv._global_omit_module_check = false; -dojo.hostenv.loadModule = function(modulename, exact_only, omit_module_check){ - if(!modulename){ return; } - omit_module_check = this._global_omit_module_check || omit_module_check; - var module = this.findModule(modulename, false); - if(module){ - return module; - } - - // protect against infinite recursion from mutual dependencies - if(dj_undef(modulename, this.loading_modules_)){ - this.addedToLoadingCount.push(modulename); - } - this.loading_modules_[modulename] = 1; - - // convert periods to slashes - var relpath = modulename.replace(/\./g, '/') + '.js'; - - var syms = modulename.split("."); - var nsyms = modulename.split("."); - for (var i = syms.length - 1; i > 0; i--) { - var parentModule = syms.slice(0, i).join("."); - var parentModulePath = this.getModulePrefix(parentModule); - if (parentModulePath != parentModule) { - syms.splice(0, i, parentModulePath); - break; - } - } - var last = syms[syms.length - 1]; - // figure out if we're looking for a full package, if so, we want to do - // things slightly diffrently - if(last=="*"){ - modulename = (nsyms.slice(0, -1)).join('.'); - - while(syms.length){ - syms.pop(); - syms.push(this.pkgFileName); - relpath = syms.join("/") + '.js'; - if(relpath.charAt(0)=="/"){ - relpath = relpath.slice(1); - } - ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null)); - if(ok){ break; } - syms.pop(); - } - }else{ - relpath = syms.join("/") + '.js'; - modulename = nsyms.join('.'); - var ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null)); - if((!ok)&&(!exact_only)){ - syms.pop(); - while(syms.length){ - relpath = syms.join('/') + '.js'; - ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null)); - if(ok){ break; } - syms.pop(); - relpath = syms.join('/') + '/'+this.pkgFileName+'.js'; - if(relpath.charAt(0)=="/"){ - relpath = relpath.slice(1); - } - ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null)); - if(ok){ break; } - } - } - - if((!ok)&&(!omit_module_check)){ - dojo.raise("Could not load '" + modulename + "'; last tried '" + relpath + "'"); - } - } - - // check that the symbol was defined - if(!omit_module_check){ - // pass in false so we can give better error - module = this.findModule(modulename, false); - if(!module){ - dojo.raise("symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); - } - } - - return module; -} - -/** -* startPackage("A.B") follows the path, and at each level creates a new empty -* object or uses what already exists. It returns the result. -*/ -dojo.hostenv.startPackage = function(packname){ - var syms = packname.split(/\./); - if(syms[syms.length-1]=="*"){ - syms.pop(); - } - return dojo.evalObjPath(syms.join("."), true); -} - -/** - * findModule("A.B") returns the object A.B if it exists, otherwise null. - * @param modulename A string like 'A.B'. - * @param must_exist Optional, defualt false. throw instead of returning null - * if the module does not currently exist. - */ -dojo.hostenv.findModule = function(modulename, must_exist) { - // check cache - /* - if(!dj_undef(modulename, this.modules_)){ - return this.modules_[modulename]; - } - */ - - var lmn = (new String(modulename)).toLowerCase(); - - if(this.loaded_modules_[lmn]){ - return this.loaded_modules_[lmn]; - } - - // see if symbol is defined anyway - var module = dojo.evalObjPath(modulename); - if((modulename)&&(typeof module != 'undefined')&&(module)){ - this.loaded_modules_[lmn] = module; - return module; - } - - if(must_exist){ - dojo.raise("no loaded module named '" + modulename + "'"); - } - return null; -} +/* + Copyright (c) 2004-2005, The Dojo Foundation + All Rights Reserved. -/** -* @file hostenv_browser.js -* -* Implements the hostenv interface for a browser environment. -* -* Perhaps it could be called a "dom" or "useragent" environment. -* -* @author Copyright 2004 Mark D. Anderson (mda@discerning.com) -* @author Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php -*/ - -// make jsc shut up (so we can use jsc to sanity check the code even if it will never run it). -/*@cc_on -@if (@_jscript_version >= 7) -var window; var XMLHttpRequest; -@end -@*/ - -if(typeof window == 'undefined'){ - dojo.raise("no window object"); -} - -// attempt to figure out the path to dojo if it isn't set in the config -(function() { - // before we get any further with the config options, try to pick them out - // of the URL. Most of this code is from NW - if(djConfig.allowQueryConfig){ - var baseUrl = document.location.toString(); // FIXME: use location.query instead? - var params = baseUrl.split("?", 2); - if(params.length > 1){ - var paramStr = params[1]; - var pairs = paramStr.split("&"); - for(var x in pairs){ - var sp = pairs[x].split("="); - // FIXME: is this eval dangerous? - if((sp[0].length > 9)&&(sp[0].substr(0, 9) == "djConfig.")){ - var opt = sp[0].substr(9); - try{ - djConfig[opt]=eval(sp[1]); - }catch(e){ - djConfig[opt]=sp[1]; - } - } - } - } - } - - if(((djConfig["baseScriptUri"] == "")||(djConfig["baseRelativePath"] == "")) &&(document && document.getElementsByTagName)){ - var scripts = document.getElementsByTagName("script"); - var rePkg = /(__package__|dojo)\.js([\?\.]|$)/i; - for(var i = 0; i < scripts.length; i++) { - var src = scripts[i].getAttribute("src"); - if(!src) { continue; } - var m = src.match(rePkg); - if(m) { - root = src.substring(0, m.index); - if(!this["djConfig"]) { djConfig = {}; } - if(djConfig["baseScriptUri"] == "") { djConfig["baseScriptUri"] = root; } - if(djConfig["baseRelativePath"] == "") { djConfig["baseRelativePath"] = root; } - break; - } - } - } - - var dr = dojo.render; - var drh = dojo.render.html; - var dua = drh.UA = navigator.userAgent; - var dav = drh.AV = navigator.appVersion; - var t = true; - var f = false; - drh.capable = t; - drh.support.builtin = t; - - dr.ver = parseFloat(drh.AV); - dr.os.mac = dav.indexOf("Macintosh") >= 0; - dr.os.win = dav.indexOf("Windows") >= 0; - // could also be Solaris or something, but it's the same browser - dr.os.linux = dav.indexOf("X11") >= 0; - - drh.opera = dua.indexOf("Opera") >= 0; - drh.khtml = (dav.indexOf("Konqueror") >= 0)||(dav.indexOf("Safari") >= 0); - drh.safari = dav.indexOf("Safari") >= 0; - var geckoPos = dua.indexOf("Gecko"); - drh.mozilla = drh.moz = (geckoPos >= 0)&&(!drh.khtml); - if (drh.mozilla) { - // gecko version is YYYYMMDD - drh.geckoVersion = dua.substring(geckoPos + 6, geckoPos + 14); - } - drh.ie = (document.all)&&(!drh.opera); - drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0")>=0; - drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5")>=0; - drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0")>=0; - - dr.vml.capable=drh.ie; - dr.svg.capable = f; - dr.svg.support.plugin = f; - dr.svg.support.builtin = f; - dr.svg.adobe = f; - if (document.implementation - && document.implementation.hasFeature - && document.implementation.hasFeature("org.w3c.dom.svg", "1.0") - ){ - dr.svg.capable = t; - dr.svg.support.builtin = t; - dr.svg.support.plugin = f; - dr.svg.adobe = f; - }else{ - // check for ASVG - if(navigator.mimeTypes && navigator.mimeTypes.length > 0){ - var result = navigator.mimeTypes["image/svg+xml"] || - navigator.mimeTypes["image/svg"] || - navigator.mimeTypes["image/svg-xml"]; - if (result){ - dr.svg.adobe = result && result.enabledPlugin && - result.enabledPlugin.description && - (result.enabledPlugin.description.indexOf("Adobe") > -1); - if(dr.svg.adobe) { - dr.svg.capable = t; - dr.svg.support.plugin = t; - } - } - }else if(drh.ie && dr.os.win){ - var result = f; - try { - var test = new ActiveXObject("Adobe.SVGCtl"); - result = t; - } catch(e){} - if (result){ - dr.svg.capable = t; - dr.svg.support.plugin = t; - dr.svg.adobe = t; - } - }else{ - dr.svg.capable = f; - dr.svg.support.plugin = f; - dr.svg.adobe = f; - } - } -})(); - -dojo.hostenv.startPackage("dojo.hostenv"); - -dojo.hostenv.name_ = 'browser'; -dojo.hostenv.searchIds = []; - -// These are in order of decreasing likelihood; this will change in time. -var DJ_XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; - -dojo.hostenv.getXmlhttpObject = function(){ - var http = null; - var last_e = null; - try{ http = new XMLHttpRequest(); }catch(e){} - if(!http){ - for(var i=0; i<3; ++i){ - var progid = DJ_XMLHTTP_PROGIDS[i]; - try{ - http = new ActiveXObject(progid); - }catch(e){ - last_e = e; - } - - if(http){ - DJ_XMLHTTP_PROGIDS = [progid]; // so faster next time - break; - } - } - - /*if(http && !http.toString) { - http.toString = function() { "[object XMLHttpRequest]"; } - }*/ - } - - if(!http){ - return dojo.raise("XMLHTTP not available", last_e); - } - - return http; -} - -/** - * Read the contents of the specified uri and return those contents. - * - * @param uri A relative or absolute uri. If absolute, it still must be in the - * same "domain" as we are. - * - * @param async_cb If not specified, load synchronously. If specified, load - * asynchronously, and use async_cb as the progress handler which takes the - * xmlhttp object as its argument. If async_cb, this function returns null. - * - * @param fail_ok Default false. If fail_ok and !async_cb and loading fails, - * return null instead of throwing. - */ -dojo.hostenv.getText = function(uri, async_cb, fail_ok){ - - var http = this.getXmlhttpObject(); - - if(async_cb){ - http.onreadystatechange = function(){ - if((4==http.readyState)&&(http["status"])){ - if(http.status==200){ - // dojo.debug("LOADED URI: "+uri); - async_cb(http.responseText); - } - } - } - } - - http.open('GET', uri, async_cb ? true : false); - http.send(null); - if(async_cb){ - return null; - } - - return http.responseText; -} - -/* - * It turns out that if we check *right now*, as this script file is being loaded, - * then the last script element in the window DOM is ourselves. - * That is because any subsequent script elements haven't shown up in the document - * object yet. - */ - /* -function dj_last_script_src() { - var scripts = window.document.getElementsByTagName('script'); - if(scripts.length < 1){ - dojo.raise("No script elements in window.document, so can't figure out my script src"); - } - var script = scripts[scripts.length - 1]; - var src = script.src; - if(!src){ - dojo.raise("Last script element (out of " + scripts.length + ") has no src"); - } - return src; -} - -if(!dojo.hostenv["library_script_uri_"]){ - dojo.hostenv.library_script_uri_ = dj_last_script_src(); -} -*/ - -dojo.hostenv.defaultDebugContainerId = 'dojoDebug'; -dojo.hostenv._println_buffer = []; -dojo.hostenv._println_safe = false; -dojo.hostenv.println = function (line){ - if(!dojo.hostenv._println_safe){ - dojo.hostenv._println_buffer.push(line); - }else{ - try { - var console = document.getElementById(djConfig.debugContainerId ? - djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId); - if(!console) { console = document.getElementsByTagName("body")[0] || document.body; } - - var div = document.createElement("div"); - div.appendChild(document.createTextNode(line)); - console.appendChild(div); - } catch (e) { - try{ - // safari needs the output wrapped in an element for some reason - document.write("
      " + line + "
      "); - }catch(e2){ - window.status = line; - } - } - } -} - -dojo.addOnLoad(function(){ - dojo.hostenv._println_safe = true; - while(dojo.hostenv._println_buffer.length > 0){ - dojo.hostenv.println(dojo.hostenv._println_buffer.shift()); - } -}); - -function dj_addNodeEvtHdlr (node, evtName, fp, capture){ - var oldHandler = node["on"+evtName] || function(){}; - node["on"+evtName] = function(){ - fp.apply(node, arguments); - oldHandler.apply(node, arguments); - } - return true; -} - -dj_addNodeEvtHdlr(window, "load", function(){ - if(dojo.render.html.ie){ - dojo.hostenv.makeWidgets(); - } - dojo.hostenv.modulesLoaded(); -}); - -dojo.hostenv.makeWidgets = function(){ - // you can put searchIds in djConfig and dojo.hostenv at the moment - // we should probably eventually move to one or the other - var sids = []; - if(djConfig.searchIds && djConfig.searchIds.length > 0) { - sids = sids.concat(djConfig.searchIds); - } - if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) { - sids = sids.concat(dojo.hostenv.searchIds); - } - - if((djConfig.parseWidgets)||(sids.length > 0)){ - if(dojo.evalObjPath("dojo.widget.Parse")){ - // we must do this on a delay to avoid: - // http://www.shaftek.org/blog/archives/000212.html - // IE is such a tremendous peice of shit. - try{ - var parser = new dojo.xml.Parse(); - if(sids.length > 0){ - for(var x=0; xv\:*{ behavior:url(#default#VML); }'); - document.write(''); - } -} catch (e) { } - -// stub, over-ridden by debugging code. This will at least keep us from -// breaking when it's not included -dojo.hostenv.writeIncludes = function(){} - -dojo.hostenv.byId = dojo.byId = function(id, doc){ - if(typeof id == "string" || id instanceof String){ - if(!doc){ doc = document; } - return doc.getElementById(id); - } - return id; // assume it's a node -} - -dojo.hostenv.byIdArray = dojo.byIdArray = function(){ - var ids = []; - for(var i = 0; i < arguments.length; i++){ - if((arguments[i] instanceof Array)||(typeof arguments[i] == "array")){ - for(var j = 0; j < arguments[i].length; j++){ - ids = ids.concat(dojo.hostenv.byIdArray(arguments[i][j])); - } - }else{ - ids.push(dojo.hostenv.byId(arguments[i])); - } - } - return ids; -} + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: -/* - * bootstrap2.js - runs after the hostenv_*.js file. - */ - -/* - * This method taks a "map" of arrays which one can use to optionally load dojo - * modules. The map is indexed by the possible dojo.hostenv.name_ values, with - * two additional values: "default" and "common". The items in the "default" - * array will be loaded if none of the other items have been choosen based on - * the hostenv.name_ item. The items in the "common" array will _always_ be - * loaded, regardless of which list is chosen. Here's how it's normally - * called: - * - * dojo.hostenv.conditionalLoadModule({ - * browser: [ - * ["foo.bar.baz", true, true], // an example that passes multiple args to loadModule() - * "foo.sample.*", - * "foo.test, - * ], - * default: [ "foo.sample.*" ], - * common: [ "really.important.module.*" ] - * }); - */ -dojo.hostenv.conditionalLoadModule = function(modMap){ - var common = modMap["common"]||[]; - var result = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]); - - for(var x=0; x= 0; i--) { - if(arr[i] === val){ return i; } - } - }else{ - for(var i = arr.length-1; i >= 0; i--) { - if(arr[i] == val){ return i; } - } - } - return -1; -} - -dojo.lang.lastIndexOf = dojo.lang.findLast; - -dojo.lang.inArray = function(arr, val){ - return dojo.lang.find(arr, val) > -1; -} - -dojo.lang.getNameInObj = function(ns, item){ - if(!ns){ ns = dj_global; } - - for(var x in ns){ - if(ns[x] === item){ - return new String(x); - } - } - return null; -} - -// FIXME: Is this worthless since you can do: if(name in obj) -// is this the right place for this? -dojo.lang.has = function(obj, name){ - return (typeof obj[name] !== 'undefined'); -} - -dojo.lang.isEmpty = function(obj) { - if(dojo.lang.isObject(obj)) { - var tmp = {}; - var count = 0; - for(var x in obj){ - if(obj[x] && (!tmp[x])){ - count++; - break; - } - } - return (count == 0); - } else if(dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)) { - return obj.length == 0; - } -} - -dojo.lang.forEach = function(arr, unary_func, fix_length){ - var isString = dojo.lang.isString(arr); - if(isString) { arr = arr.split(""); } - var il = arr.length; - for(var i=0; i< ((fix_length) ? il : arr.length); i++){ - if(unary_func(arr[i], i, arr) == "break"){ - break; - } - } -} - -dojo.lang.map = function(arr, obj, unary_func){ - var isString = dojo.lang.isString(arr); - if(isString){ - arr = arr.split(""); - } - if(dojo.lang.isFunction(obj)&&(!unary_func)){ - unary_func = obj; - obj = dj_global; - }else if(dojo.lang.isFunction(obj) && unary_func){ - // ff 1.5 compat - var tmpObj = obj; - obj = unary_func; - unary_func = tmpObj; - } - - if(Array.map){ - var outArr = Array.map(arr, unary_func, obj); - }else{ - var outArr = []; - for(var i=0;i= 3) { dojo.raise("thisObject doesn't exist!"); } - thisObject = dj_global; - } - - for(var i = 0; i < arr.length; i++) { - if(!callback.call(thisObject, arr[i], i, arr)) { - return false; - } - } - return true; - } -} - -dojo.lang.some = function(arr, callback, thisObject) { - var isString = dojo.lang.isString(arr); - if(isString) { arr = arr.split(""); } - if(Array.some) { - return Array.some(arr, callback, thisObject); - } else { - if(!thisObject) { - if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); } - thisObject = dj_global; - } - - for(var i = 0; i < arr.length; i++) { - if(callback.call(thisObject, arr[i], i, arr)) { - return true; - } - } - return false; - } -} - -dojo.lang.filter = function(arr, callback, thisObject) { - var isString = dojo.lang.isString(arr); - if(isString) { arr = arr.split(""); } - if(Array.filter) { - var outArr = Array.filter(arr, callback, thisObject); - } else { - if(!thisObject) { - if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); } - thisObject = dj_global; - } - - var outArr = []; - for(var i = 0; i < arr.length; i++) { - if(callback.call(thisObject, arr[i], i, arr)) { - outArr.push(arr[i]); - } - } - } - if(isString) { - return outArr.join(""); - } else { - return outArr; - } -} - -dojo.AdapterRegistry = function(){ - /*** - A registry to facilitate adaptation. - - Pairs is an array of [name, check, wrap] triples - - All check/wrap functions in this registry should be of the same arity. - ***/ - this.pairs = []; -} - -dojo.lang.extend(dojo.AdapterRegistry, { - register: function (name, check, wrap, /* optional */ override){ - /*** - The check function should return true if the given arguments are - appropriate for the wrap function. - - If override is given and true, the check function will be given - highest priority. Otherwise, it will be the lowest priority - adapter. - ***/ - - if (override) { - this.pairs.unshift([name, check, wrap]); - } else { - this.pairs.push([name, check, wrap]); - } - }, - - match: function (/* ... */) { - /*** - Find an adapter for the given arguments. - - If no suitable adapter is found, throws NotFound. - ***/ - for(var i = 0; i < this.pairs.length; i++){ - var pair = this.pairs[i]; - if(pair[1].apply(this, arguments)){ - return pair[2].apply(this, arguments); - } - } - throw new Error("No match found"); - // dojo.raise("No match found"); - }, - - unregister: function (name) { - /*** - Remove a named adapter from the registry - ***/ - for(var i = 0; i < this.pairs.length; i++){ - var pair = this.pairs[i]; - if(pair[0] == name){ - this.pairs.splice(i, 1); - return true; - } - } - return false; - } -}); - -dojo.lang.reprRegistry = new dojo.AdapterRegistry(); -dojo.lang.registerRepr = function(name, check, wrap, /*optional*/ override){ - /*** - Register a repr function. repr functions should take - one argument and return a string representation of it - suitable for developers, primarily used when debugging. - - If override is given, it is used as the highest priority - repr, otherwise it will be used as the lowest. - ***/ - dojo.lang.reprRegistry.register(name, check, wrap, override); - }; - -dojo.lang.repr = function(obj){ - /*** - Return a "programmer representation" for an object - ***/ - if(typeof(obj) == "undefined"){ - return "undefined"; - }else if(obj === null){ - return "null"; - } - - try{ - if(typeof(obj["__repr__"]) == 'function'){ - return obj["__repr__"](); - }else if((typeof(obj["repr"]) == 'function')&&(obj.repr != arguments.callee)){ - return obj["repr"](); - } - return dojo.lang.reprRegistry.match(obj); - }catch(e){ - if(typeof(obj.NAME) == 'string' && ( - obj.toString == Function.prototype.toString || - obj.toString == Object.prototype.toString - )){ - return o.NAME; - } - } - - if(typeof(obj) == "function"){ - obj = (obj + "").replace(/^\s+/, ""); - var idx = obj.indexOf("{"); - if(idx != -1){ - obj = obj.substr(0, idx) + "{...}"; - } - } - return obj + ""; -} - -dojo.lang.reprArrayLike = function(arr){ - try{ - var na = dojo.lang.map(arr, dojo.lang.repr); - return "[" + na.join(", ") + "]"; - }catch(e){ } -}; - -dojo.lang.reprString = function(str){ - return ('"' + str.replace(/(["\\])/g, '\\$1') + '"' - ).replace(/[\f]/g, "\\f" - ).replace(/[\b]/g, "\\b" - ).replace(/[\n]/g, "\\n" - ).replace(/[\t]/g, "\\t" - ).replace(/[\r]/g, "\\r"); -}; - -dojo.lang.reprNumber = function(num){ - return num + ""; -}; - -(function(){ - var m = dojo.lang; - m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike); - m.registerRepr("string", m.isString, m.reprString); - m.registerRepr("numbers", m.isNumber, m.reprNumber); - m.registerRepr("boolean", m.isBoolean, m.reprNumber); - // m.registerRepr("numbers", m.typeMatcher("number", "boolean"), m.reprNumber); -})(); - -/** - * Creates a 1-D array out of all the arguments passed, - * unravelling any array-like objects in the process - * - * Ex: - * unnest(1, 2, 3) ==> [1, 2, 3] - * unnest(1, [2, [3], [[[4]]]]) ==> [1, 2, 3, 4] - */ -dojo.lang.unnest = function(/* ... */) { - var out = []; - for(var i = 0; i < arguments.length; i++) { - if(dojo.lang.isArrayLike(arguments[i])) { - var add = dojo.lang.unnest.apply(this, arguments[i]); - out = out.concat(add); - } else { - out.push(arguments[i]); - } - } - return out; -} - -/** - * Return the first argument that isn't undefined - */ -dojo.lang.firstValued = function(/* ... */) { - for(var i = 0; i < arguments.length; i++) { - if(typeof arguments[i] != "undefined") { - return arguments[i]; - } - } - return undefined; -} - -/** - * Converts an array-like object (i.e. arguments, DOMCollection) - * to an array -**/ -dojo.lang.toArray = function(arrayLike, startOffset) { - var array = []; - for(var i = startOffset||0; i < arrayLike.length; i++) { - array.push(arrayLike[i]); - } - return array; -} +/** +* @file bootstrap1.js +* +* bootstrap file that runs before hostenv_*.js file. +* +* @author Copyright 2004 Mark D. Anderson (mda@discerning.com) +* @author Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php +* +* $Id: bootstrap1.js 2836 2006-01-16 08:36:18Z alex $ +*/ -dojo.provide("dojo.string"); -dojo.require("dojo.lang"); - -/** - * Trim whitespace from 'str'. If 'wh' > 0, - * only trim from start, if 'wh' < 0, only trim - * from end, otherwise trim both ends - */ -dojo.string.trim = function(str, wh){ - if(!dojo.lang.isString(str)){ return str; } - if(!str.length){ return str; } - if(wh > 0) { - return str.replace(/^\s+/, ""); - } else if(wh < 0) { - return str.replace(/\s+$/, ""); - } else { - return str.replace(/^\s+|\s+$/g, ""); - } -} - -/** - * Trim whitespace at the beginning of 'str' - */ -dojo.string.trimStart = function(str) { - return dojo.string.trim(str, 1); -} - -/** - * Trim whitespace at the end of 'str' - */ -dojo.string.trimEnd = function(str) { - return dojo.string.trim(str, -1); -} - -/** - * Parameterized string function - * str - formatted string with %{values} to be replaces - * pairs - object of name: "value" value pairs - * killExtra - remove all remaining %{values} after pairs are inserted - */ -dojo.string.paramString = function(str, pairs, killExtra) { - for(var name in pairs) { - var re = new RegExp("\\%\\{" + name + "\\}", "g"); - str = str.replace(re, pairs[name]); - } - - if(killExtra) { str = str.replace(/%\{([^\}\s]+)\}/g, ""); } - return str; -} - -/** Uppercases the first letter of each word */ -dojo.string.capitalize = function (str) { - if (!dojo.lang.isString(str)) { return ""; } - if (arguments.length == 0) { str = this; } - var words = str.split(' '); - var retval = ""; - var len = words.length; - for (var i=0; i/gm, ">").replace(/"/gm, """); - if(!noSingleQuotes) { str = str.replace(/'/gm, "'"); } - return str; -} - -dojo.string.escapeSql = function(str) { - return str.replace(/'/gm, "''"); -} - -dojo.string.escapeRegExp = function(str) { - return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r])/gm, "\\$1"); -} - -dojo.string.escapeJavaScript = function(str) { - return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1"); -} - -/** - * Return 'str' repeated 'count' times, optionally - * placing 'separator' between each rep - */ -dojo.string.repeat = function(str, count, separator) { - var out = ""; - for(var i = 0; i < count; i++) { - out += str; - if(separator && i < count - 1) { - out += separator; - } - } - return out; -} - -/** - * Returns true if 'str' ends with 'end' - */ -dojo.string.endsWith = function(str, end, ignoreCase) { - if(ignoreCase) { - str = str.toLowerCase(); - end = end.toLowerCase(); - } - return str.lastIndexOf(end) == str.length - end.length; -} - -/** - * Returns true if 'str' ends with any of the arguments[2 -> n] - */ -dojo.string.endsWithAny = function(str /* , ... */) { - for(var i = 1; i < arguments.length; i++) { - if(dojo.string.endsWith(str, arguments[i])) { - return true; - } - } - return false; -} - -/** - * Returns true if 'str' starts with 'start' - */ -dojo.string.startsWith = function(str, start, ignoreCase) { - if(ignoreCase) { - str = str.toLowerCase(); - start = start.toLowerCase(); - } - return str.indexOf(start) == 0; -} - -/** - * Returns true if 'str' starts with any of the arguments[2 -> n] - */ -dojo.string.startsWithAny = function(str /* , ... */) { - for(var i = 1; i < arguments.length; i++) { - if(dojo.string.startsWith(str, arguments[i])) { - return true; - } - } - return false; -} - -/** - * Returns true if 'str' starts with any of the arguments 2 -> n - */ -dojo.string.has = function(str /* , ... */) { - for(var i = 1; i < arguments.length; i++) { - if(str.indexOf(arguments[i] > -1)) { - return true; - } - } - return false; -} - -/** - * Pad 'str' to guarantee that it is at least 'len' length - * with the character 'c' at either the start (dir=1) or - * end (dir=-1) of the string - */ -dojo.string.pad = function(str, len/*=2*/, c/*='0'*/, dir/*=1*/) { - var out = String(str); - if(!c) { - c = '0'; - } - if(!dir) { - dir = 1; - } - while(out.length < len) { - if(dir > 0) { - out = c + out; - } else { - out += c; - } - } - return out; -} - -/** same as dojo.string.pad(str, len, c, 1) */ -dojo.string.padLeft = function(str, len, c) { - return dojo.string.pad(str, len, c, 1); -} - -/** same as dojo.string.pad(str, len, c, -1) */ -dojo.string.padRight = function(str, len, c) { - return dojo.string.pad(str, len, c, -1); -} - -dojo.string.normalizeNewlines = function (text,newlineChar) { - if (newlineChar == "\n") { - text = text.replace(/\r\n/g, "\n"); - text = text.replace(/\r/g, "\n"); - } else if (newlineChar == "\r") { - text = text.replace(/\r\n/g, "\r"); - text = text.replace(/\n/g, "\r"); - } else { - text = text.replace(/([^\r])\n/g, "$1\r\n"); - text = text.replace(/\r([^\n])/g, "\r\n$1"); - } - return text; -} - -dojo.string.splitEscaped = function (str,charac) { - var components = []; - for (var i = 0, prevcomma = 0; i < str.length; i++) { - if (str.charAt(i) == '\\') { i++; continue; } - if (str.charAt(i) == charac) { - components.push(str.substring(prevcomma, i)); - prevcomma = i + 1; - } - } - components.push(str.substr(prevcomma)); - return components; -} - - -// do we even want to offer this? is it worth it? -dojo.string.addToPrototype = function() { - for(var method in dojo.string) { - if(dojo.lang.isFunction(dojo.string[method])) { - var func = (function() { - var meth = method; - switch(meth) { - case "addToPrototype": - return null; - break; - case "escape": - return function(type) { - return dojo.string.escape(type, this); - } - break; - default: - return function() { - var args = [this]; - for(var i = 0; i < arguments.length; i++) { - args.push(arguments[i]); - } - dojo.debug(args); - return dojo.string[meth].apply(dojo.string, args); - } - } - })(); - if(func) { String.prototype[method] = func; } - } - } -} +/** + * The global djConfig can be set prior to loading the library, to override + * certain settings. It does not exist under dojo.* so that it can be set + * before the dojo variable exists. Setting any of these variables *after* the + * library has loaded does nothing at all. The variables that can be set are + * as follows: + */ -dojo.provide("dojo.io.IO"); -dojo.require("dojo.string"); - -/****************************************************************************** - * Notes about dojo.io design: - * - * The dojo.io.* package has the unenviable task of making a lot of different - * types of I/O feel natural, despite a universal lack of good (or even - * reasonable!) I/O capability in the host environment. So lets pin this down - * a little bit further. - * - * Rhino: - * perhaps the best situation anywhere. Access to Java classes allows you - * to do anything one might want in terms of I/O, both synchronously and - * async. Can open TCP sockets and perform low-latency client/server - * interactions. HTTP transport is available through Java HTTP client and - * server classes. Wish it were always this easy. - * - * xpcshell: - * XPCOM for I/O. A cluster-fuck to be sure. - * - * spidermonkey: - * S.O.L. - * - * Browsers: - * Browsers generally do not provide any useable filesystem access. We are - * therefore limited to HTTP for moving information to and from Dojo - * instances living in a browser. - * - * XMLHTTP: - * Sync or async, allows reading of arbitrary text files (including - * JS, which can then be eval()'d), writing requires server - * cooperation and is limited to HTTP mechanisms (POST and GET). - * - * "); - } -}catch(e){/* squelch */} - -dojo.io.checkChildrenForFile = function(node){ - var hasFile = false; - var inputs = node.getElementsByTagName("input"); - dojo.lang.forEach(inputs, function(input){ - if(hasFile){ return; } - if(input.getAttribute("type")=="file"){ - hasFile = true; - } - }); - return hasFile; -} - -dojo.io.formHasFile = function(formNode){ - return dojo.io.checkChildrenForFile(formNode); -} - -// TODO: Move to htmlUtils -dojo.io.encodeForm = function(formNode, encoding){ - if((!formNode)||(!formNode.tagName)||(!formNode.tagName.toLowerCase() == "form")){ - dojo.raise("Attempted to encode a non-form element."); - } - var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii; - var values = []; - - for(var i = 0; i < formNode.elements.length; i++){ - var elm = formNode.elements[i]; - if(elm.disabled || elm.tagName.toLowerCase() == "fieldset" || !elm.name){ - continue; - } - var name = enc(elm.name); - var type = elm.type.toLowerCase(); - - if(type == "select-multiple"){ - for(var j = 0; j < elm.options.length; j++){ - if(elm.options[j].selected) { - values.push(name + "=" + enc(elm.options[j].value)); - } - } - }else if(dojo.lang.inArray(type, ["radio", "checkbox"])){ - if(elm.checked){ - values.push(name + "=" + enc(elm.value)); - } - }else if(!dojo.lang.inArray(type, ["file", "submit", "reset", "button"])) { - values.push(name + "=" + enc(elm.value)); - } - } - - // now collect input type="image", which doesn't show up in the elements array - var inputs = formNode.getElementsByTagName("input"); - for(var i = 0; i < inputs.length; i++) { - var input = inputs[i]; - if(input.type.toLowerCase() == "image" && input.form == formNode) { - var name = enc(input.name); - values.push(name + "=" + enc(input.value)); - values.push(name + ".x=0"); - values.push(name + ".y=0"); - } - } - return values.join("&") + "&"; -} - -dojo.io.setIFrameSrc = function(iframe, src, replace){ - try{ - var r = dojo.render.html; - // dojo.debug(iframe); - if(!replace){ - if(r.safari){ - iframe.location = src; - }else{ - frames[iframe.name].location = src; - } - }else{ - // Fun with DOM 0 incompatibilities! - var idoc; - if(r.ie){ - idoc = iframe.contentWindow.document; - }else if(r.moz){ - idoc = iframe.contentWindow; - }else if(r.safari){ - idoc = iframe.document; - } - idoc.location.replace(src); - } - }catch(e){ - dojo.debug(e); - dojo.debug("setIFrameSrc: "+e); - } -} - -dojo.io.XMLHTTPTransport = new function(){ - var _this = this; - - this.initialHref = window.location.href; - this.initialHash = window.location.hash; - - this.moveForward = false; - - var _cache = {}; // FIXME: make this public? do we even need to? - this.useCache = false; // if this is true, we'll cache unless kwArgs.useCache = false - this.preventCache = false; // if this is true, we'll always force GET requests to cache - this.historyStack = []; - this.forwardStack = []; - this.historyIframe = null; - this.bookmarkAnchor = null; - this.locationTimer = null; - - /* NOTES: - * Safari 1.2: - * back button "works" fine, however it's not possible to actually - * DETECT that you've moved backwards by inspecting window.location. - * Unless there is some other means of locating. - * FIXME: perhaps we can poll on history.length? - * IE 5.5 SP2: - * back button behavior is macro. It does not move back to the - * previous hash value, but to the last full page load. This suggests - * that the iframe is the correct way to capture the back button in - * these cases. - * IE 6.0: - * same behavior as IE 5.5 SP2 - * Firefox 1.0: - * the back button will return us to the previous hash on the same - * page, thereby not requiring an iframe hack, although we do then - * need to run a timer to detect inter-page movement. - */ - - // FIXME: Should this even be a function? or do we just hard code it in the next 2 functions? - function getCacheKey(url, query, method) { - return url + "|" + query + "|" + method.toLowerCase(); - } - - function addToCache(url, query, method, http) { - _cache[getCacheKey(url, query, method)] = http; - } - - function getFromCache(url, query, method) { - return _cache[getCacheKey(url, query, method)]; - } - - this.clearCache = function() { - _cache = {}; - } - - // moved successful load stuff here - function doLoad(kwArgs, http, url, query, useCache) { - if((http.status==200)||(location.protocol=="file:" && http.status==0)) { - var ret; - if(kwArgs.method.toLowerCase() == "head"){ - var headers = http.getAllResponseHeaders(); - ret = {}; - ret.toString = function(){ return headers; } - var values = headers.split(/[\r\n]+/g); - for(var i = 0; i < values.length; i++) { - var pair = values[i].match(/^([^:]+)\s*:\s*(.+)$/i); - if(pair) { - ret[pair[1]] = pair[2]; - } - } - }else if(kwArgs.mimetype == "text/javascript"){ - try{ - ret = dj_eval(http.responseText); - }catch(e){ - dojo.debug(e); - dojo.debug(http.responseText); - ret = null; - } - }else if(kwArgs.mimetype == "text/json"){ - try{ - ret = dj_eval("("+http.responseText+")"); - }catch(e){ - dojo.debug(e); - dojo.debug(http.responseText); - ret = false; - } - }else if((kwArgs.mimetype == "application/xml")|| - (kwArgs.mimetype == "text/xml")){ - ret = http.responseXML; - if(!ret || typeof ret == "string") { - ret = dojo.dom.createDocumentFromText(http.responseText); - } - }else{ - ret = http.responseText; - } - - if(useCache){ // only cache successful responses - addToCache(url, query, kwArgs.method, http); - } - kwArgs[(typeof kwArgs.load == "function") ? "load" : "handle"]("load", ret, http); - }else{ - var errObj = new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText); - kwArgs[(typeof kwArgs.error == "function") ? "error" : "handle"]("error", errObj, http); - } - } - - // set headers (note: Content-Type will get overriden if kwArgs.contentType is set) - function setHeaders(http, kwArgs){ - if(kwArgs["headers"]) { - for(var header in kwArgs["headers"]) { - if(header.toLowerCase() == "content-type" && !kwArgs["contentType"]) { - kwArgs["contentType"] = kwArgs["headers"][header]; - } else { - http.setRequestHeader(header, kwArgs["headers"][header]); - } - } - } - } - - this.addToHistory = function(args){ - var callback = args["back"]||args["backButton"]||args["handle"]; - var hash = null; - if(!this.historyIframe){ - this.historyIframe = window.frames["djhistory"]; - } - if(!this.bookmarkAnchor){ - this.bookmarkAnchor = document.createElement("a"); - (document.body||document.getElementsByTagName("body")[0]).appendChild(this.bookmarkAnchor); - this.bookmarkAnchor.style.display = "none"; - } - if((!args["changeUrl"])||(dojo.render.html.ie)){ - var url = dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime(); - this.moveForward = true; - dojo.io.setIFrameSrc(this.historyIframe, url, false); - } - if(args["changeUrl"]){ - hash = "#"+ ((args["changeUrl"]!==true) ? args["changeUrl"] : (new Date()).getTime()); - setTimeout("window.location.href = '"+hash+"';", 1); - this.bookmarkAnchor.href = hash; - if(dojo.render.html.ie){ - // IE requires manual setting of the hash since we are catching - // events from the iframe - var oldCB = callback; - var lh = null; - var hsl = this.historyStack.length-1; - if(hsl>=0){ - while(!this.historyStack[hsl]["urlHash"]){ - hsl--; - } - lh = this.historyStack[hsl]["urlHash"]; - } - if(lh){ - callback = function(){ - if(window.location.hash != ""){ - setTimeout("window.location.href = '"+lh+"';", 1); - } - oldCB(); - } - } - // when we issue a new bind(), we clobber the forward - // FIXME: is this always a good idea? - this.forwardStack = []; - var oldFW = args["forward"]||args["forwardButton"];; - var tfw = function(){ - if(window.location.hash != ""){ - window.location.href = hash; - } - if(oldFW){ // we might not actually have one - oldFW(); - } - } - if(args["forward"]){ - args.forward = tfw; - }else if(args["forwardButton"]){ - args.forwardButton = tfw; - } - }else if(dojo.render.html.moz){ - // start the timer - if(!this.locationTimer){ - this.locationTimer = setInterval("dojo.io.XMLHTTPTransport.checkLocation();", 200); - } - } - } - - this.historyStack.push({"url": url, "callback": callback, "kwArgs": args, "urlHash": hash}); - } - - this.checkLocation = function(){ - var hsl = this.historyStack.length; - - if((window.location.hash == this.initialHash)||(window.location.href == this.initialHref)&&(hsl == 1)){ - // FIXME: could this ever be a forward button? - // we can't clear it because we still need to check for forwards. Ugg. - // clearInterval(this.locationTimer); - this.handleBackButton(); - return; - } - // first check to see if we could have gone forward. We always halt on - // a no-hash item. - if(this.forwardStack.length > 0){ - if(this.forwardStack[this.forwardStack.length-1].urlHash == window.location.hash){ - this.handleForwardButton(); - return; - } - } - // ok, that didn't work, try someplace back in the history stack - if((hsl >= 2)&&(this.historyStack[hsl-2])){ - if(this.historyStack[hsl-2].urlHash==window.location.hash){ - this.handleBackButton(); - return; - } - } - } - - this.iframeLoaded = function(evt, ifrLoc){ - var isp = ifrLoc.href.split("?"); - if(isp.length < 2){ - // alert("iframeLoaded"); - // we hit the end of the history, so we should go back - if(this.historyStack.length == 1){ - this.handleBackButton(); - } - return; - } - var query = isp[1]; - if(this.moveForward){ - // we were expecting it, so it's not either a forward or backward - // movement - this.moveForward = false; - return; - } - - var last = this.historyStack.pop(); - // we don't have anything in history, so it could be a forward button - if(!last){ - if(this.forwardStack.length > 0){ - var next = this.forwardStack[this.forwardStack.length-1]; - if(query == next.url.split("?")[1]){ - this.handleForwardButton(); - } - } - // regardless, we didnt' have any history, so it can't be a back button - return; - } - // put it back on the stack so we can do something useful with it when - // we call handleBackButton() - this.historyStack.push(last); - if(this.historyStack.length >= 2){ - if(isp[1] == this.historyStack[this.historyStack.length-2].url.split("?")[1]){ - // looks like it IS a back button press, so handle it - this.handleBackButton(); - } - }else{ - this.handleBackButton(); - } - } - - this.handleBackButton = function(){ - var last = this.historyStack.pop(); - if(!last){ return; } - if(last["callback"]){ - last.callback(); - }else if(last.kwArgs["backButton"]){ - last.kwArgs["backButton"](); - }else if(last.kwArgs["back"]){ - last.kwArgs["back"](); - }else if(last.kwArgs["handle"]){ - last.kwArgs.handle("back"); - } - this.forwardStack.push(last); - } - - this.handleForwardButton = function(){ - // FIXME: should we build in support for re-issuing the bind() call here? - // alert("alert we found a forward button call"); - var last = this.forwardStack.pop(); - if(!last){ return; } - if(last.kwArgs["forward"]){ - last.kwArgs.forward(); - }else if(last.kwArgs["forwardButton"]){ - last.kwArgs.forwardButton(); - }else if(last.kwArgs["handle"]){ - last.kwArgs.handle("forward"); - } - this.historyStack.push(last); - } - - this.inFlight = []; - this.inFlightTimer = null; - - this.startWatchingInFlight = function(){ - if(!this.inFlightTimer){ - this.inFlightTimer = setInterval("dojo.io.XMLHTTPTransport.watchInFlight();", 10); - } - } - - this.watchInFlight = function(){ - for(var x=this.inFlight.length-1; x>=0; x--){ - var tif = this.inFlight[x]; - if(!tif){ this.inFlight.splice(x, 1); continue; } - if(4==tif.http.readyState){ - // remove it so we can clean refs - this.inFlight.splice(x, 1); - doLoad(tif.req, tif.http, tif.url, tif.query, tif.useCache); - if(this.inFlight.length == 0){ - clearInterval(this.inFlightTimer); - this.inFlightTimer = null; - } - } // FIXME: need to implement a timeout param here! - } - } - - var hasXmlHttp = dojo.hostenv.getXmlhttpObject() ? true : false; - this.canHandle = function(kwArgs){ - // canHandle just tells dojo.io.bind() if this is a good transport to - // use for the particular type of request. - - // FIXME: we need to determine when form values need to be - // multi-part mime encoded and avoid using this transport for those - // requests. - return hasXmlHttp - && dojo.lang.inArray((kwArgs["mimetype"]||"".toLowerCase()), ["text/plain", "text/html", "application/xml", "text/xml", "text/javascript", "text/json"]) - && dojo.lang.inArray(kwArgs["method"].toLowerCase(), ["post", "get", "head"]) - && !( kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"]) ); - } - - this.multipartBoundary = "45309FFF-BD65-4d50-99C9-36986896A96F"; // unique guid as a boundary value for multipart posts - - this.bind = function(kwArgs){ - if(!kwArgs["url"]){ - // are we performing a history action? - if( !kwArgs["formNode"] - && (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"] || kwArgs["watchForURL"]) - && (!djConfig.preventBackButtonFix)) { - this.addToHistory(kwArgs); - return true; - } - } - - // build this first for cache purposes - var url = kwArgs.url; - var query = ""; - if(kwArgs["formNode"]){ - var ta = kwArgs.formNode.getAttribute("action"); - if((ta)&&(!kwArgs["url"])){ url = ta; } - var tp = kwArgs.formNode.getAttribute("method"); - if((tp)&&(!kwArgs["method"])){ kwArgs.method = tp; } - query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding); - } - - if(url.indexOf("#") > -1) { - dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url); - url = url.split("#")[0]; - } - - if(kwArgs["file"]){ - // force post for file transfer - kwArgs.method = "post"; - } - - if(!kwArgs["method"]){ - kwArgs.method = "get"; - } - - // guess the multipart value - if(kwArgs.method.toLowerCase() == "get"){ - // GET cannot use multipart - kwArgs.multipart = false; - }else{ - if(kwArgs["file"]){ - // enforce multipart when sending files - kwArgs.multipart = true; - }else if(!kwArgs["multipart"]){ - // default - kwArgs.multipart = false; - } - } - - if(kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]){ - this.addToHistory(kwArgs); - } - - var content = kwArgs["content"] || {}; - - if(kwArgs.sendTransport) { - content["dojo.transport"] = "xmlhttp"; - } - - do { // break-block - if(kwArgs.postContent){ - query = kwArgs.postContent; - break; - } - - if(content) { - query += dojo.io.argsFromMap(content, kwArgs.encoding); - } - - if(kwArgs.method.toLowerCase() == "get" || !kwArgs.multipart){ - break; - } - - var t = []; - if(query.length){ - var q = query.split("&"); - for(var i = 0; i < q.length; ++i){ - if(q[i].length){ - var p = q[i].split("="); - t.push( "--" + this.multipartBoundary, - "Content-Disposition: form-data; name=\"" + p[0] + "\"", - "", - p[1]); - } - } - } - - if(kwArgs.file){ - if(dojo.lang.isArray(kwArgs.file)){ - for(var i = 0; i < kwArgs.file.length; ++i){ - var o = kwArgs.file[i]; - t.push( "--" + this.multipartBoundary, - "Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"", - "Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"), - "", - o.content); - } - }else{ - var o = kwArgs.file; - t.push( "--" + this.multipartBoundary, - "Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"", - "Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"), - "", - o.content); - } - } - - if(t.length){ - t.push("--"+this.multipartBoundary+"--", ""); - query = t.join("\r\n"); - } - }while(false); - - // kwArgs.Connection = "close"; - - var async = kwArgs["sync"] ? false : true; - - var preventCache = kwArgs["preventCache"] || - (this.preventCache == true && kwArgs["preventCache"] != false); - var useCache = kwArgs["useCache"] == true || - (this.useCache == true && kwArgs["useCache"] != false ); - - // preventCache is browser-level (add query string junk), useCache - // is for the local cache. If we say preventCache, then don't attempt - // to look in the cache, but if useCache is true, we still want to cache - // the response - if(!preventCache && useCache){ - var cachedHttp = getFromCache(url, query, kwArgs.method); - if(cachedHttp){ - doLoad(kwArgs, cachedHttp, url, query, false); - return; - } - } - - // much of this is from getText, but reproduced here because we need - // more flexibility - var http = dojo.hostenv.getXmlhttpObject(); - var received = false; - - // build a handler function that calls back to the handler obj - if(async){ - // FIXME: setting up this callback handler leaks on IE!!! - this.inFlight.push({ - "req": kwArgs, - "http": http, - "url": url, - "query": query, - "useCache": useCache - }); - this.startWatchingInFlight(); - } - - if(kwArgs.method.toLowerCase() == "post"){ - // FIXME: need to hack in more flexible Content-Type setting here! - http.open("POST", url, async); - setHeaders(http, kwArgs); - http.setRequestHeader("Content-Type", kwArgs.multipart ? ("multipart/form-data; boundary=" + this.multipartBoundary) : - (kwArgs.contentType || "application/x-www-form-urlencoded")); - http.send(query); - }else{ - var tmpUrl = url; - if(query != "") { - tmpUrl += (tmpUrl.indexOf("?") > -1 ? "&" : "?") + query; - } - if(preventCache) { - tmpUrl += (dojo.string.endsWithAny(tmpUrl, "?", "&") - ? "" : (tmpUrl.indexOf("?") > -1 ? "&" : "?")) + "dojo.preventCache=" + new Date().valueOf(); - } - http.open(kwArgs.method.toUpperCase(), tmpUrl, async); - setHeaders(http, kwArgs); - http.send(null); - } - - if( !async ) { - doLoad(kwArgs, http, url, query, useCache); - } - - kwArgs.abort = function(){ - return http.abort(); - } - - return; - } - dojo.io.transports.addTransport("XMLHTTPTransport"); -} +if(dj_undef("djConfig")){ + var djConfig = {}; +} + +/** + * dojo is the root variable of (almost all) our public symbols. + */ +var dojo; +if(dj_undef("dojo")){ dojo = {}; } + +dojo.version = { + major: 0, minor: 2, patch: 2, flag: "", + revision: Number("$Rev: 2836 $".match(/[0-9]+/)[0]), + toString: function() { + with (dojo.version) { + return major + "." + minor + "." + patch + flag + " (" + revision + ")"; + } + } +}; + +/* + * evaluate a string like "A.B" without using eval. + */ +dojo.evalObjPath = function(objpath, create){ + // fast path for no periods + if(typeof objpath != "string"){ return dj_global; } + if(objpath.indexOf('.') == -1){ + if((dj_undef(objpath, dj_global))&&(create)){ + dj_global[objpath] = {}; + } + return dj_global[objpath]; + } + + var syms = objpath.split(/\./); + var obj = dj_global; + for(var i=0;i 1) { + dojo.hostenv.modulesLoadedListeners.push(function() { + obj[fcnName](); + }); + } +}; + +dojo.hostenv.modulesLoaded = function(){ + if(this.post_load_){ return; } + if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){ + if(this.inFlightCount > 0){ + dojo.debug("files still in flight!"); + return; + } + if(typeof setTimeout == "object"){ + setTimeout("dojo.hostenv.loaded();", 0); + }else{ + dojo.hostenv.loaded(); + } + } +} + +dojo.hostenv.moduleLoaded = function(modulename){ + var modref = dojo.evalObjPath((modulename.split(".").slice(0, -1)).join('.')); + this.loaded_modules_[(new String(modulename)).toLowerCase()] = modref; +} + +/** +* loadModule("A.B") first checks to see if symbol A.B is defined. +* If it is, it is simply returned (nothing to do). +* +* If it is not defined, it will look for "A/B.js" in the script root directory, +* followed by "A.js". +* +* It throws if it cannot find a file to load, or if the symbol A.B is not +* defined after loading. +* +* It returns the object A.B. +* +* This does nothing about importing symbols into the current package. +* It is presumed that the caller will take care of that. For example, to import +* all symbols: +* +* with (dojo.hostenv.loadModule("A.B")) { +* ... +* } +* +* And to import just the leaf symbol: +* +* var B = dojo.hostenv.loadModule("A.B"); +* ... +* +* dj_load is an alias for dojo.hostenv.loadModule +*/ +dojo.hostenv._global_omit_module_check = false; +dojo.hostenv.loadModule = function(modulename, exact_only, omit_module_check){ + if(!modulename){ return; } + omit_module_check = this._global_omit_module_check || omit_module_check; + var module = this.findModule(modulename, false); + if(module){ + return module; + } + + // protect against infinite recursion from mutual dependencies + if(dj_undef(modulename, this.loading_modules_)){ + this.addedToLoadingCount.push(modulename); + } + this.loading_modules_[modulename] = 1; + + // convert periods to slashes + var relpath = modulename.replace(/\./g, '/') + '.js'; + + var syms = modulename.split("."); + var nsyms = modulename.split("."); + for (var i = syms.length - 1; i > 0; i--) { + var parentModule = syms.slice(0, i).join("."); + var parentModulePath = this.getModulePrefix(parentModule); + if (parentModulePath != parentModule) { + syms.splice(0, i, parentModulePath); + break; + } + } + var last = syms[syms.length - 1]; + // figure out if we're looking for a full package, if so, we want to do + // things slightly diffrently + if(last=="*"){ + modulename = (nsyms.slice(0, -1)).join('.'); + + while(syms.length){ + syms.pop(); + syms.push(this.pkgFileName); + relpath = syms.join("/") + '.js'; + if(relpath.charAt(0)=="/"){ + relpath = relpath.slice(1); + } + ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null)); + if(ok){ break; } + syms.pop(); + } + }else{ + relpath = syms.join("/") + '.js'; + modulename = nsyms.join('.'); + var ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null)); + if((!ok)&&(!exact_only)){ + syms.pop(); + while(syms.length){ + relpath = syms.join('/') + '.js'; + ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null)); + if(ok){ break; } + syms.pop(); + relpath = syms.join('/') + '/'+this.pkgFileName+'.js'; + if(relpath.charAt(0)=="/"){ + relpath = relpath.slice(1); + } + ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null)); + if(ok){ break; } + } + } + + if((!ok)&&(!omit_module_check)){ + dojo.raise("Could not load '" + modulename + "'; last tried '" + relpath + "'"); + } + } + + // check that the symbol was defined + if(!omit_module_check){ + // pass in false so we can give better error + module = this.findModule(modulename, false); + if(!module){ + dojo.raise("symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); + } + } + + return module; +} + +/** +* startPackage("A.B") follows the path, and at each level creates a new empty +* object or uses what already exists. It returns the result. +*/ +dojo.hostenv.startPackage = function(packname){ + var syms = packname.split(/\./); + if(syms[syms.length-1]=="*"){ + syms.pop(); + } + return dojo.evalObjPath(syms.join("."), true); +} + +/** + * findModule("A.B") returns the object A.B if it exists, otherwise null. + * @param modulename A string like 'A.B'. + * @param must_exist Optional, defualt false. throw instead of returning null + * if the module does not currently exist. + */ +dojo.hostenv.findModule = function(modulename, must_exist) { + // check cache + /* + if(!dj_undef(modulename, this.modules_)){ + return this.modules_[modulename]; + } + */ + + var lmn = (new String(modulename)).toLowerCase(); + + if(this.loaded_modules_[lmn]){ + return this.loaded_modules_[lmn]; + } + + // see if symbol is defined anyway + var module = dojo.evalObjPath(modulename); + if((modulename)&&(typeof module != 'undefined')&&(module)){ + this.loaded_modules_[lmn] = module; + return module; + } + + if(must_exist){ + dojo.raise("no loaded module named '" + modulename + "'"); + } + return null; +} + +/** +* @file hostenv_browser.js +* +* Implements the hostenv interface for a browser environment. +* +* Perhaps it could be called a "dom" or "useragent" environment. +* +* @author Copyright 2004 Mark D. Anderson (mda@discerning.com) +* @author Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php +*/ + +// make jsc shut up (so we can use jsc to sanity check the code even if it will never run it). +/*@cc_on +@if (@_jscript_version >= 7) +var window; var XMLHttpRequest; +@end +@*/ + +if(typeof window == 'undefined'){ + dojo.raise("no window object"); +} + +// attempt to figure out the path to dojo if it isn't set in the config +(function() { + // before we get any further with the config options, try to pick them out + // of the URL. Most of this code is from NW + if(djConfig.allowQueryConfig){ + var baseUrl = document.location.toString(); // FIXME: use location.query instead? + var params = baseUrl.split("?", 2); + if(params.length > 1){ + var paramStr = params[1]; + var pairs = paramStr.split("&"); + for(var x in pairs){ + var sp = pairs[x].split("="); + // FIXME: is this eval dangerous? + if((sp[0].length > 9)&&(sp[0].substr(0, 9) == "djConfig.")){ + var opt = sp[0].substr(9); + try{ + djConfig[opt]=eval(sp[1]); + }catch(e){ + djConfig[opt]=sp[1]; + } + } + } + } + } + + if(((djConfig["baseScriptUri"] == "")||(djConfig["baseRelativePath"] == "")) &&(document && document.getElementsByTagName)){ + var scripts = document.getElementsByTagName("script"); + var rePkg = /(__package__|dojo)\.js([\?\.]|$)/i; + for(var i = 0; i < scripts.length; i++) { + var src = scripts[i].getAttribute("src"); + if(!src) { continue; } + var m = src.match(rePkg); + if(m) { + root = src.substring(0, m.index); + if(!this["djConfig"]) { djConfig = {}; } + if(djConfig["baseScriptUri"] == "") { djConfig["baseScriptUri"] = root; } + if(djConfig["baseRelativePath"] == "") { djConfig["baseRelativePath"] = root; } + break; + } + } + } + + var dr = dojo.render; + var drh = dojo.render.html; + var dua = drh.UA = navigator.userAgent; + var dav = drh.AV = navigator.appVersion; + var t = true; + var f = false; + drh.capable = t; + drh.support.builtin = t; + + dr.ver = parseFloat(drh.AV); + dr.os.mac = dav.indexOf("Macintosh") >= 0; + dr.os.win = dav.indexOf("Windows") >= 0; + // could also be Solaris or something, but it's the same browser + dr.os.linux = dav.indexOf("X11") >= 0; + + drh.opera = dua.indexOf("Opera") >= 0; + drh.khtml = (dav.indexOf("Konqueror") >= 0)||(dav.indexOf("Safari") >= 0); + drh.safari = dav.indexOf("Safari") >= 0; + var geckoPos = dua.indexOf("Gecko"); + drh.mozilla = drh.moz = (geckoPos >= 0)&&(!drh.khtml); + if (drh.mozilla) { + // gecko version is YYYYMMDD + drh.geckoVersion = dua.substring(geckoPos + 6, geckoPos + 14); + } + drh.ie = (document.all)&&(!drh.opera); + drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0")>=0; + drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5")>=0; + drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0")>=0; + + dr.vml.capable=drh.ie; + dr.svg.capable = f; + dr.svg.support.plugin = f; + dr.svg.support.builtin = f; + dr.svg.adobe = f; + if (document.implementation + && document.implementation.hasFeature + && document.implementation.hasFeature("org.w3c.dom.svg", "1.0") + ){ + dr.svg.capable = t; + dr.svg.support.builtin = t; + dr.svg.support.plugin = f; + dr.svg.adobe = f; + }else{ + // check for ASVG + if(navigator.mimeTypes && navigator.mimeTypes.length > 0){ + var result = navigator.mimeTypes["image/svg+xml"] || + navigator.mimeTypes["image/svg"] || + navigator.mimeTypes["image/svg-xml"]; + if (result){ + dr.svg.adobe = result && result.enabledPlugin && + result.enabledPlugin.description && + (result.enabledPlugin.description.indexOf("Adobe") > -1); + if(dr.svg.adobe) { + dr.svg.capable = t; + dr.svg.support.plugin = t; + } + } + }else if(drh.ie && dr.os.win){ + var result = f; + try { + var test = new ActiveXObject("Adobe.SVGCtl"); + result = t; + } catch(e){} + if (result){ + dr.svg.capable = t; + dr.svg.support.plugin = t; + dr.svg.adobe = t; + } + }else{ + dr.svg.capable = f; + dr.svg.support.plugin = f; + dr.svg.adobe = f; + } + } +})(); + +dojo.hostenv.startPackage("dojo.hostenv"); + +dojo.hostenv.name_ = 'browser'; +dojo.hostenv.searchIds = []; + +// These are in order of decreasing likelihood; this will change in time. +var DJ_XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; + +dojo.hostenv.getXmlhttpObject = function(){ + var http = null; + var last_e = null; + try{ http = new XMLHttpRequest(); }catch(e){} + if(!http){ + for(var i=0; i<3; ++i){ + var progid = DJ_XMLHTTP_PROGIDS[i]; + try{ + http = new ActiveXObject(progid); + }catch(e){ + last_e = e; + } + + if(http){ + DJ_XMLHTTP_PROGIDS = [progid]; // so faster next time + break; + } + } + + /*if(http && !http.toString) { + http.toString = function() { "[object XMLHttpRequest]"; } + }*/ + } + + if(!http){ + return dojo.raise("XMLHTTP not available", last_e); + } + + return http; +} + +/** + * Read the contents of the specified uri and return those contents. + * + * @param uri A relative or absolute uri. If absolute, it still must be in the + * same "domain" as we are. + * + * @param async_cb If not specified, load synchronously. If specified, load + * asynchronously, and use async_cb as the progress handler which takes the + * xmlhttp object as its argument. If async_cb, this function returns null. + * + * @param fail_ok Default false. If fail_ok and !async_cb and loading fails, + * return null instead of throwing. + */ +dojo.hostenv.getText = function(uri, async_cb, fail_ok){ + + var http = this.getXmlhttpObject(); + + if(async_cb){ + http.onreadystatechange = function(){ + if((4==http.readyState)&&(http["status"])){ + if(http.status==200){ + // dojo.debug("LOADED URI: "+uri); + async_cb(http.responseText); + } + } + } + } + + http.open('GET', uri, async_cb ? true : false); + http.send(null); + if(async_cb){ + return null; + } + + return http.responseText; +} + +/* + * It turns out that if we check *right now*, as this script file is being loaded, + * then the last script element in the window DOM is ourselves. + * That is because any subsequent script elements haven't shown up in the document + * object yet. + */ + /* +function dj_last_script_src() { + var scripts = window.document.getElementsByTagName('script'); + if(scripts.length < 1){ + dojo.raise("No script elements in window.document, so can't figure out my script src"); + } + var script = scripts[scripts.length - 1]; + var src = script.src; + if(!src){ + dojo.raise("Last script element (out of " + scripts.length + ") has no src"); + } + return src; +} + +if(!dojo.hostenv["library_script_uri_"]){ + dojo.hostenv.library_script_uri_ = dj_last_script_src(); +} +*/ + +dojo.hostenv.defaultDebugContainerId = 'dojoDebug'; +dojo.hostenv._println_buffer = []; +dojo.hostenv._println_safe = false; +dojo.hostenv.println = function (line){ + if(!dojo.hostenv._println_safe){ + dojo.hostenv._println_buffer.push(line); + }else{ + try { + var console = document.getElementById(djConfig.debugContainerId ? + djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId); + if(!console) { console = document.getElementsByTagName("body")[0] || document.body; } + + var div = document.createElement("div"); + div.appendChild(document.createTextNode(line)); + console.appendChild(div); + } catch (e) { + try{ + // safari needs the output wrapped in an element for some reason + document.write("
      " + line + "
      "); + }catch(e2){ + window.status = line; + } + } + } +} + +dojo.addOnLoad(function(){ + dojo.hostenv._println_safe = true; + while(dojo.hostenv._println_buffer.length > 0){ + dojo.hostenv.println(dojo.hostenv._println_buffer.shift()); + } +}); + +function dj_addNodeEvtHdlr (node, evtName, fp, capture){ + var oldHandler = node["on"+evtName] || function(){}; + node["on"+evtName] = function(){ + fp.apply(node, arguments); + oldHandler.apply(node, arguments); + } + return true; +} + +dj_addNodeEvtHdlr(window, "load", function(){ + if(dojo.render.html.ie){ + dojo.hostenv.makeWidgets(); + } + dojo.hostenv.modulesLoaded(); +}); + +dojo.hostenv.makeWidgets = function(){ + // you can put searchIds in djConfig and dojo.hostenv at the moment + // we should probably eventually move to one or the other + var sids = []; + if(djConfig.searchIds && djConfig.searchIds.length > 0) { + sids = sids.concat(djConfig.searchIds); + } + if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) { + sids = sids.concat(dojo.hostenv.searchIds); + } + + if((djConfig.parseWidgets)||(sids.length > 0)){ + if(dojo.evalObjPath("dojo.widget.Parse")){ + // we must do this on a delay to avoid: + // http://www.shaftek.org/blog/archives/000212.html + // IE is such a tremendous peice of shit. + try{ + var parser = new dojo.xml.Parse(); + if(sids.length > 0){ + for(var x=0; xv\:*{ behavior:url(#default#VML); }'); + document.write(''); + } +} catch (e) { } + +// stub, over-ridden by debugging code. This will at least keep us from +// breaking when it's not included +dojo.hostenv.writeIncludes = function(){} + +dojo.hostenv.byId = dojo.byId = function(id, doc){ + if(typeof id == "string" || id instanceof String){ + if(!doc){ doc = document; } + return doc.getElementById(id); + } + return id; // assume it's a node +} + +dojo.hostenv.byIdArray = dojo.byIdArray = function(){ + var ids = []; + for(var i = 0; i < arguments.length; i++){ + if((arguments[i] instanceof Array)||(typeof arguments[i] == "array")){ + for(var j = 0; j < arguments[i].length; j++){ + ids = ids.concat(dojo.hostenv.byIdArray(arguments[i][j])); + } + }else{ + ids.push(dojo.hostenv.byId(arguments[i])); + } + } + return ids; +} + +/* + * bootstrap2.js - runs after the hostenv_*.js file. + */ + +/* + * This method taks a "map" of arrays which one can use to optionally load dojo + * modules. The map is indexed by the possible dojo.hostenv.name_ values, with + * two additional values: "default" and "common". The items in the "default" + * array will be loaded if none of the other items have been choosen based on + * the hostenv.name_ item. The items in the "common" array will _always_ be + * loaded, regardless of which list is chosen. Here's how it's normally + * called: + * + * dojo.hostenv.conditionalLoadModule({ + * browser: [ + * ["foo.bar.baz", true, true], // an example that passes multiple args to loadModule() + * "foo.sample.*", + * "foo.test, + * ], + * default: [ "foo.sample.*" ], + * common: [ "really.important.module.*" ] + * }); + */ +dojo.hostenv.conditionalLoadModule = function(modMap){ + var common = modMap["common"]||[]; + var result = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]); + + for(var x=0; x= 0; i--) { + if(arr[i] === val){ return i; } + } + }else{ + for(var i = arr.length-1; i >= 0; i--) { + if(arr[i] == val){ return i; } + } + } + return -1; +} + +dojo.lang.lastIndexOf = dojo.lang.findLast; + +dojo.lang.inArray = function(arr, val){ + return dojo.lang.find(arr, val) > -1; +} + +dojo.lang.getNameInObj = function(ns, item){ + if(!ns){ ns = dj_global; } + + for(var x in ns){ + if(ns[x] === item){ + return new String(x); + } + } + return null; +} + +// FIXME: Is this worthless since you can do: if(name in obj) +// is this the right place for this? +dojo.lang.has = function(obj, name){ + return (typeof obj[name] !== 'undefined'); +} + +dojo.lang.isEmpty = function(obj) { + if(dojo.lang.isObject(obj)) { + var tmp = {}; + var count = 0; + for(var x in obj){ + if(obj[x] && (!tmp[x])){ + count++; + break; + } + } + return (count == 0); + } else if(dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)) { + return obj.length == 0; + } +} + +dojo.lang.forEach = function(arr, unary_func, fix_length){ + var isString = dojo.lang.isString(arr); + if(isString) { arr = arr.split(""); } + var il = arr.length; + for(var i=0; i< ((fix_length) ? il : arr.length); i++){ + if(unary_func(arr[i], i, arr) == "break"){ + break; + } + } +} + +dojo.lang.map = function(arr, obj, unary_func){ + var isString = dojo.lang.isString(arr); + if(isString){ + arr = arr.split(""); + } + if(dojo.lang.isFunction(obj)&&(!unary_func)){ + unary_func = obj; + obj = dj_global; + }else if(dojo.lang.isFunction(obj) && unary_func){ + // ff 1.5 compat + var tmpObj = obj; + obj = unary_func; + unary_func = tmpObj; + } + + if(Array.map){ + var outArr = Array.map(arr, unary_func, obj); + }else{ + var outArr = []; + for(var i=0;i= 3) { dojo.raise("thisObject doesn't exist!"); } + thisObject = dj_global; + } + + for(var i = 0; i < arr.length; i++) { + if(!callback.call(thisObject, arr[i], i, arr)) { + return false; + } + } + return true; + } +} + +dojo.lang.some = function(arr, callback, thisObject) { + var isString = dojo.lang.isString(arr); + if(isString) { arr = arr.split(""); } + if(Array.some) { + return Array.some(arr, callback, thisObject); + } else { + if(!thisObject) { + if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); } + thisObject = dj_global; + } + + for(var i = 0; i < arr.length; i++) { + if(callback.call(thisObject, arr[i], i, arr)) { + return true; + } + } + return false; + } +} + +dojo.lang.filter = function(arr, callback, thisObject) { + var isString = dojo.lang.isString(arr); + if(isString) { arr = arr.split(""); } + if(Array.filter) { + var outArr = Array.filter(arr, callback, thisObject); + } else { + if(!thisObject) { + if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); } + thisObject = dj_global; + } + + var outArr = []; + for(var i = 0; i < arr.length; i++) { + if(callback.call(thisObject, arr[i], i, arr)) { + outArr.push(arr[i]); + } + } + } + if(isString) { + return outArr.join(""); + } else { + return outArr; + } +} + +dojo.AdapterRegistry = function(){ + /*** + A registry to facilitate adaptation. + + Pairs is an array of [name, check, wrap] triples + + All check/wrap functions in this registry should be of the same arity. + ***/ + this.pairs = []; +} + +dojo.lang.extend(dojo.AdapterRegistry, { + register: function (name, check, wrap, /* optional */ override){ + /*** + The check function should return true if the given arguments are + appropriate for the wrap function. + + If override is given and true, the check function will be given + highest priority. Otherwise, it will be the lowest priority + adapter. + ***/ + + if (override) { + this.pairs.unshift([name, check, wrap]); + } else { + this.pairs.push([name, check, wrap]); + } + }, + + match: function (/* ... */) { + /*** + Find an adapter for the given arguments. + + If no suitable adapter is found, throws NotFound. + ***/ + for(var i = 0; i < this.pairs.length; i++){ + var pair = this.pairs[i]; + if(pair[1].apply(this, arguments)){ + return pair[2].apply(this, arguments); + } + } + throw new Error("No match found"); + // dojo.raise("No match found"); + }, + + unregister: function (name) { + /*** + Remove a named adapter from the registry + ***/ + for(var i = 0; i < this.pairs.length; i++){ + var pair = this.pairs[i]; + if(pair[0] == name){ + this.pairs.splice(i, 1); + return true; + } + } + return false; + } +}); + +dojo.lang.reprRegistry = new dojo.AdapterRegistry(); +dojo.lang.registerRepr = function(name, check, wrap, /*optional*/ override){ + /*** + Register a repr function. repr functions should take + one argument and return a string representation of it + suitable for developers, primarily used when debugging. + + If override is given, it is used as the highest priority + repr, otherwise it will be used as the lowest. + ***/ + dojo.lang.reprRegistry.register(name, check, wrap, override); + }; + +dojo.lang.repr = function(obj){ + /*** + Return a "programmer representation" for an object + ***/ + if(typeof(obj) == "undefined"){ + return "undefined"; + }else if(obj === null){ + return "null"; + } + + try{ + if(typeof(obj["__repr__"]) == 'function'){ + return obj["__repr__"](); + }else if((typeof(obj["repr"]) == 'function')&&(obj.repr != arguments.callee)){ + return obj["repr"](); + } + return dojo.lang.reprRegistry.match(obj); + }catch(e){ + if(typeof(obj.NAME) == 'string' && ( + obj.toString == Function.prototype.toString || + obj.toString == Object.prototype.toString + )){ + return o.NAME; + } + } + + if(typeof(obj) == "function"){ + obj = (obj + "").replace(/^\s+/, ""); + var idx = obj.indexOf("{"); + if(idx != -1){ + obj = obj.substr(0, idx) + "{...}"; + } + } + return obj + ""; +} + +dojo.lang.reprArrayLike = function(arr){ + try{ + var na = dojo.lang.map(arr, dojo.lang.repr); + return "[" + na.join(", ") + "]"; + }catch(e){ } +}; + +dojo.lang.reprString = function(str){ + return ('"' + str.replace(/(["\\])/g, '\\$1') + '"' + ).replace(/[\f]/g, "\\f" + ).replace(/[\b]/g, "\\b" + ).replace(/[\n]/g, "\\n" + ).replace(/[\t]/g, "\\t" + ).replace(/[\r]/g, "\\r"); +}; + +dojo.lang.reprNumber = function(num){ + return num + ""; +}; + +(function(){ + var m = dojo.lang; + m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike); + m.registerRepr("string", m.isString, m.reprString); + m.registerRepr("numbers", m.isNumber, m.reprNumber); + m.registerRepr("boolean", m.isBoolean, m.reprNumber); + // m.registerRepr("numbers", m.typeMatcher("number", "boolean"), m.reprNumber); +})(); + +/** + * Creates a 1-D array out of all the arguments passed, + * unravelling any array-like objects in the process + * + * Ex: + * unnest(1, 2, 3) ==> [1, 2, 3] + * unnest(1, [2, [3], [[[4]]]]) ==> [1, 2, 3, 4] + */ +dojo.lang.unnest = function(/* ... */) { + var out = []; + for(var i = 0; i < arguments.length; i++) { + if(dojo.lang.isArrayLike(arguments[i])) { + var add = dojo.lang.unnest.apply(this, arguments[i]); + out = out.concat(add); + } else { + out.push(arguments[i]); + } + } + return out; +} + +/** + * Return the first argument that isn't undefined + */ +dojo.lang.firstValued = function(/* ... */) { + for(var i = 0; i < arguments.length; i++) { + if(typeof arguments[i] != "undefined") { + return arguments[i]; + } + } + return undefined; +} + +/** + * Converts an array-like object (i.e. arguments, DOMCollection) + * to an array +**/ +dojo.lang.toArray = function(arrayLike, startOffset) { + var array = []; + for(var i = startOffset||0; i < arrayLike.length; i++) { + array.push(arrayLike[i]); + } + return array; +} + +dojo.provide("dojo.string"); +dojo.require("dojo.lang"); + +/** + * Trim whitespace from 'str'. If 'wh' > 0, + * only trim from start, if 'wh' < 0, only trim + * from end, otherwise trim both ends + */ +dojo.string.trim = function(str, wh){ + if(!dojo.lang.isString(str)){ return str; } + if(!str.length){ return str; } + if(wh > 0) { + return str.replace(/^\s+/, ""); + } else if(wh < 0) { + return str.replace(/\s+$/, ""); + } else { + return str.replace(/^\s+|\s+$/g, ""); + } +} + +/** + * Trim whitespace at the beginning of 'str' + */ +dojo.string.trimStart = function(str) { + return dojo.string.trim(str, 1); +} + +/** + * Trim whitespace at the end of 'str' + */ +dojo.string.trimEnd = function(str) { + return dojo.string.trim(str, -1); +} + +/** + * Parameterized string function + * str - formatted string with %{values} to be replaces + * pairs - object of name: "value" value pairs + * killExtra - remove all remaining %{values} after pairs are inserted + */ +dojo.string.paramString = function(str, pairs, killExtra) { + for(var name in pairs) { + var re = new RegExp("\\%\\{" + name + "\\}", "g"); + str = str.replace(re, pairs[name]); + } + + if(killExtra) { str = str.replace(/%\{([^\}\s]+)\}/g, ""); } + return str; +} + +/** Uppercases the first letter of each word */ +dojo.string.capitalize = function (str) { + if (!dojo.lang.isString(str)) { return ""; } + if (arguments.length == 0) { str = this; } + var words = str.split(' '); + var retval = ""; + var len = words.length; + for (var i=0; i/gm, ">").replace(/"/gm, """); + if(!noSingleQuotes) { str = str.replace(/'/gm, "'"); } + return str; +} + +dojo.string.escapeSql = function(str) { + return str.replace(/'/gm, "''"); +} + +dojo.string.escapeRegExp = function(str) { + return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r])/gm, "\\$1"); +} + +dojo.string.escapeJavaScript = function(str) { + return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1"); +} + +/** + * Return 'str' repeated 'count' times, optionally + * placing 'separator' between each rep + */ +dojo.string.repeat = function(str, count, separator) { + var out = ""; + for(var i = 0; i < count; i++) { + out += str; + if(separator && i < count - 1) { + out += separator; + } + } + return out; +} + +/** + * Returns true if 'str' ends with 'end' + */ +dojo.string.endsWith = function(str, end, ignoreCase) { + if(ignoreCase) { + str = str.toLowerCase(); + end = end.toLowerCase(); + } + return str.lastIndexOf(end) == str.length - end.length; +} + +/** + * Returns true if 'str' ends with any of the arguments[2 -> n] + */ +dojo.string.endsWithAny = function(str /* , ... */) { + for(var i = 1; i < arguments.length; i++) { + if(dojo.string.endsWith(str, arguments[i])) { + return true; + } + } + return false; +} + +/** + * Returns true if 'str' starts with 'start' + */ +dojo.string.startsWith = function(str, start, ignoreCase) { + if(ignoreCase) { + str = str.toLowerCase(); + start = start.toLowerCase(); + } + return str.indexOf(start) == 0; +} + +/** + * Returns true if 'str' starts with any of the arguments[2 -> n] + */ +dojo.string.startsWithAny = function(str /* , ... */) { + for(var i = 1; i < arguments.length; i++) { + if(dojo.string.startsWith(str, arguments[i])) { + return true; + } + } + return false; +} + +/** + * Returns true if 'str' starts with any of the arguments 2 -> n + */ +dojo.string.has = function(str /* , ... */) { + for(var i = 1; i < arguments.length; i++) { + if(str.indexOf(arguments[i] > -1)) { + return true; + } + } + return false; +} + +/** + * Pad 'str' to guarantee that it is at least 'len' length + * with the character 'c' at either the start (dir=1) or + * end (dir=-1) of the string + */ +dojo.string.pad = function(str, len/*=2*/, c/*='0'*/, dir/*=1*/) { + var out = String(str); + if(!c) { + c = '0'; + } + if(!dir) { + dir = 1; + } + while(out.length < len) { + if(dir > 0) { + out = c + out; + } else { + out += c; + } + } + return out; +} + +/** same as dojo.string.pad(str, len, c, 1) */ +dojo.string.padLeft = function(str, len, c) { + return dojo.string.pad(str, len, c, 1); +} + +/** same as dojo.string.pad(str, len, c, -1) */ +dojo.string.padRight = function(str, len, c) { + return dojo.string.pad(str, len, c, -1); +} + +dojo.string.normalizeNewlines = function (text,newlineChar) { + if (newlineChar == "\n") { + text = text.replace(/\r\n/g, "\n"); + text = text.replace(/\r/g, "\n"); + } else if (newlineChar == "\r") { + text = text.replace(/\r\n/g, "\r"); + text = text.replace(/\n/g, "\r"); + } else { + text = text.replace(/([^\r])\n/g, "$1\r\n"); + text = text.replace(/\r([^\n])/g, "\r\n$1"); + } + return text; +} + +dojo.string.splitEscaped = function (str,charac) { + var components = []; + for (var i = 0, prevcomma = 0; i < str.length; i++) { + if (str.charAt(i) == '\\') { i++; continue; } + if (str.charAt(i) == charac) { + components.push(str.substring(prevcomma, i)); + prevcomma = i + 1; + } + } + components.push(str.substr(prevcomma)); + return components; +} + + +// do we even want to offer this? is it worth it? +dojo.string.addToPrototype = function() { + for(var method in dojo.string) { + if(dojo.lang.isFunction(dojo.string[method])) { + var func = (function() { + var meth = method; + switch(meth) { + case "addToPrototype": + return null; + break; + case "escape": + return function(type) { + return dojo.string.escape(type, this); + } + break; + default: + return function() { + var args = [this]; + for(var i = 0; i < arguments.length; i++) { + args.push(arguments[i]); + } + dojo.debug(args); + return dojo.string[meth].apply(dojo.string, args); + } + } + })(); + if(func) { String.prototype[method] = func; } + } + } +} + +dojo.provide("dojo.io.IO"); +dojo.require("dojo.string"); + +/****************************************************************************** + * Notes about dojo.io design: + * + * The dojo.io.* package has the unenviable task of making a lot of different + * types of I/O feel natural, despite a universal lack of good (or even + * reasonable!) I/O capability in the host environment. So lets pin this down + * a little bit further. + * + * Rhino: + * perhaps the best situation anywhere. Access to Java classes allows you + * to do anything one might want in terms of I/O, both synchronously and + * async. Can open TCP sockets and perform low-latency client/server + * interactions. HTTP transport is available through Java HTTP client and + * server classes. Wish it were always this easy. + * + * xpcshell: + * XPCOM for I/O. A cluster-fuck to be sure. + * + * spidermonkey: + * S.O.L. + * + * Browsers: + * Browsers generally do not provide any useable filesystem access. We are + * therefore limited to HTTP for moving information to and from Dojo + * instances living in a browser. + * + * XMLHTTP: + * Sync or async, allows reading of arbitrary text files (including + * JS, which can then be eval()'d), writing requires server + * cooperation and is limited to HTTP mechanisms (POST and GET). + * + * "); + } +}catch(e){/* squelch */} + +dojo.io.checkChildrenForFile = function(node){ + var hasFile = false; + var inputs = node.getElementsByTagName("input"); + dojo.lang.forEach(inputs, function(input){ + if(hasFile){ return; } + if(input.getAttribute("type")=="file"){ + hasFile = true; + } + }); + return hasFile; +} + +dojo.io.formHasFile = function(formNode){ + return dojo.io.checkChildrenForFile(formNode); +} + +// TODO: Move to htmlUtils +dojo.io.encodeForm = function(formNode, encoding){ + if((!formNode)||(!formNode.tagName)||(!formNode.tagName.toLowerCase() == "form")){ + dojo.raise("Attempted to encode a non-form element."); + } + var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii; + var values = []; + + for(var i = 0; i < formNode.elements.length; i++){ + var elm = formNode.elements[i]; + if(elm.disabled || elm.tagName.toLowerCase() == "fieldset" || !elm.name){ + continue; + } + var name = enc(elm.name); + var type = elm.type.toLowerCase(); + + if(type == "select-multiple"){ + for(var j = 0; j < elm.options.length; j++){ + if(elm.options[j].selected) { + values.push(name + "=" + enc(elm.options[j].value)); + } + } + }else if(dojo.lang.inArray(type, ["radio", "checkbox"])){ + if(elm.checked){ + values.push(name + "=" + enc(elm.value)); + } + }else if(!dojo.lang.inArray(type, ["file", "submit", "reset", "button"])) { + values.push(name + "=" + enc(elm.value)); + } + } + + // now collect input type="image", which doesn't show up in the elements array + var inputs = formNode.getElementsByTagName("input"); + for(var i = 0; i < inputs.length; i++) { + var input = inputs[i]; + if(input.type.toLowerCase() == "image" && input.form == formNode) { + var name = enc(input.name); + values.push(name + "=" + enc(input.value)); + values.push(name + ".x=0"); + values.push(name + ".y=0"); + } + } + return values.join("&") + "&"; +} + +dojo.io.setIFrameSrc = function(iframe, src, replace){ + try{ + var r = dojo.render.html; + // dojo.debug(iframe); + if(!replace){ + if(r.safari){ + iframe.location = src; + }else{ + frames[iframe.name].location = src; + } + }else{ + // Fun with DOM 0 incompatibilities! + var idoc; + if(r.ie){ + idoc = iframe.contentWindow.document; + }else if(r.moz){ + idoc = iframe.contentWindow; + }else if(r.safari){ + idoc = iframe.document; + } + idoc.location.replace(src); + } + }catch(e){ + dojo.debug(e); + dojo.debug("setIFrameSrc: "+e); + } +} + +dojo.io.XMLHTTPTransport = new function(){ + var _this = this; + + this.initialHref = window.location.href; + this.initialHash = window.location.hash; + + this.moveForward = false; + + var _cache = {}; // FIXME: make this public? do we even need to? + this.useCache = false; // if this is true, we'll cache unless kwArgs.useCache = false + this.preventCache = false; // if this is true, we'll always force GET requests to cache + this.historyStack = []; + this.forwardStack = []; + this.historyIframe = null; + this.bookmarkAnchor = null; + this.locationTimer = null; + + /* NOTES: + * Safari 1.2: + * back button "works" fine, however it's not possible to actually + * DETECT that you've moved backwards by inspecting window.location. + * Unless there is some other means of locating. + * FIXME: perhaps we can poll on history.length? + * IE 5.5 SP2: + * back button behavior is macro. It does not move back to the + * previous hash value, but to the last full page load. This suggests + * that the iframe is the correct way to capture the back button in + * these cases. + * IE 6.0: + * same behavior as IE 5.5 SP2 + * Firefox 1.0: + * the back button will return us to the previous hash on the same + * page, thereby not requiring an iframe hack, although we do then + * need to run a timer to detect inter-page movement. + */ + + // FIXME: Should this even be a function? or do we just hard code it in the next 2 functions? + function getCacheKey(url, query, method) { + return url + "|" + query + "|" + method.toLowerCase(); + } + + function addToCache(url, query, method, http) { + _cache[getCacheKey(url, query, method)] = http; + } + + function getFromCache(url, query, method) { + return _cache[getCacheKey(url, query, method)]; + } + + this.clearCache = function() { + _cache = {}; + } + + // moved successful load stuff here + function doLoad(kwArgs, http, url, query, useCache) { + if((http.status==200)||(location.protocol=="file:" && http.status==0)) { + var ret; + if(kwArgs.method.toLowerCase() == "head"){ + var headers = http.getAllResponseHeaders(); + ret = {}; + ret.toString = function(){ return headers; } + var values = headers.split(/[\r\n]+/g); + for(var i = 0; i < values.length; i++) { + var pair = values[i].match(/^([^:]+)\s*:\s*(.+)$/i); + if(pair) { + ret[pair[1]] = pair[2]; + } + } + }else if(kwArgs.mimetype == "text/javascript"){ + try{ + ret = dj_eval(http.responseText); + }catch(e){ + dojo.debug(e); + dojo.debug(http.responseText); + ret = null; + } + }else if(kwArgs.mimetype == "text/json"){ + try{ + ret = dj_eval("("+http.responseText+")"); + }catch(e){ + dojo.debug(e); + dojo.debug(http.responseText); + ret = false; + } + }else if((kwArgs.mimetype == "application/xml")|| + (kwArgs.mimetype == "text/xml")){ + ret = http.responseXML; + if(!ret || typeof ret == "string") { + ret = dojo.dom.createDocumentFromText(http.responseText); + } + }else{ + ret = http.responseText; + } + + if(useCache){ // only cache successful responses + addToCache(url, query, kwArgs.method, http); + } + kwArgs[(typeof kwArgs.load == "function") ? "load" : "handle"]("load", ret, http); + }else{ + var errObj = new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText); + kwArgs[(typeof kwArgs.error == "function") ? "error" : "handle"]("error", errObj, http); + } + } + + // set headers (note: Content-Type will get overriden if kwArgs.contentType is set) + function setHeaders(http, kwArgs){ + if(kwArgs["headers"]) { + for(var header in kwArgs["headers"]) { + if(header.toLowerCase() == "content-type" && !kwArgs["contentType"]) { + kwArgs["contentType"] = kwArgs["headers"][header]; + } else { + http.setRequestHeader(header, kwArgs["headers"][header]); + } + } + } + } + + this.addToHistory = function(args){ + var callback = args["back"]||args["backButton"]||args["handle"]; + var hash = null; + if(!this.historyIframe){ + this.historyIframe = window.frames["djhistory"]; + } + if(!this.bookmarkAnchor){ + this.bookmarkAnchor = document.createElement("a"); + (document.body||document.getElementsByTagName("body")[0]).appendChild(this.bookmarkAnchor); + this.bookmarkAnchor.style.display = "none"; + } + if((!args["changeUrl"])||(dojo.render.html.ie)){ + var url = dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime(); + this.moveForward = true; + dojo.io.setIFrameSrc(this.historyIframe, url, false); + } + if(args["changeUrl"]){ + hash = "#"+ ((args["changeUrl"]!==true) ? args["changeUrl"] : (new Date()).getTime()); + setTimeout("window.location.href = '"+hash+"';", 1); + this.bookmarkAnchor.href = hash; + if(dojo.render.html.ie){ + // IE requires manual setting of the hash since we are catching + // events from the iframe + var oldCB = callback; + var lh = null; + var hsl = this.historyStack.length-1; + if(hsl>=0){ + while(!this.historyStack[hsl]["urlHash"]){ + hsl--; + } + lh = this.historyStack[hsl]["urlHash"]; + } + if(lh){ + callback = function(){ + if(window.location.hash != ""){ + setTimeout("window.location.href = '"+lh+"';", 1); + } + oldCB(); + } + } + // when we issue a new bind(), we clobber the forward + // FIXME: is this always a good idea? + this.forwardStack = []; + var oldFW = args["forward"]||args["forwardButton"];; + var tfw = function(){ + if(window.location.hash != ""){ + window.location.href = hash; + } + if(oldFW){ // we might not actually have one + oldFW(); + } + } + if(args["forward"]){ + args.forward = tfw; + }else if(args["forwardButton"]){ + args.forwardButton = tfw; + } + }else if(dojo.render.html.moz){ + // start the timer + if(!this.locationTimer){ + this.locationTimer = setInterval("dojo.io.XMLHTTPTransport.checkLocation();", 200); + } + } + } + + this.historyStack.push({"url": url, "callback": callback, "kwArgs": args, "urlHash": hash}); + } + + this.checkLocation = function(){ + var hsl = this.historyStack.length; + + if((window.location.hash == this.initialHash)||(window.location.href == this.initialHref)&&(hsl == 1)){ + // FIXME: could this ever be a forward button? + // we can't clear it because we still need to check for forwards. Ugg. + // clearInterval(this.locationTimer); + this.handleBackButton(); + return; + } + // first check to see if we could have gone forward. We always halt on + // a no-hash item. + if(this.forwardStack.length > 0){ + if(this.forwardStack[this.forwardStack.length-1].urlHash == window.location.hash){ + this.handleForwardButton(); + return; + } + } + // ok, that didn't work, try someplace back in the history stack + if((hsl >= 2)&&(this.historyStack[hsl-2])){ + if(this.historyStack[hsl-2].urlHash==window.location.hash){ + this.handleBackButton(); + return; + } + } + } + + this.iframeLoaded = function(evt, ifrLoc){ + var isp = ifrLoc.href.split("?"); + if(isp.length < 2){ + // alert("iframeLoaded"); + // we hit the end of the history, so we should go back + if(this.historyStack.length == 1){ + this.handleBackButton(); + } + return; + } + var query = isp[1]; + if(this.moveForward){ + // we were expecting it, so it's not either a forward or backward + // movement + this.moveForward = false; + return; + } + + var last = this.historyStack.pop(); + // we don't have anything in history, so it could be a forward button + if(!last){ + if(this.forwardStack.length > 0){ + var next = this.forwardStack[this.forwardStack.length-1]; + if(query == next.url.split("?")[1]){ + this.handleForwardButton(); + } + } + // regardless, we didnt' have any history, so it can't be a back button + return; + } + // put it back on the stack so we can do something useful with it when + // we call handleBackButton() + this.historyStack.push(last); + if(this.historyStack.length >= 2){ + if(isp[1] == this.historyStack[this.historyStack.length-2].url.split("?")[1]){ + // looks like it IS a back button press, so handle it + this.handleBackButton(); + } + }else{ + this.handleBackButton(); + } + } + + this.handleBackButton = function(){ + var last = this.historyStack.pop(); + if(!last){ return; } + if(last["callback"]){ + last.callback(); + }else if(last.kwArgs["backButton"]){ + last.kwArgs["backButton"](); + }else if(last.kwArgs["back"]){ + last.kwArgs["back"](); + }else if(last.kwArgs["handle"]){ + last.kwArgs.handle("back"); + } + this.forwardStack.push(last); + } + + this.handleForwardButton = function(){ + // FIXME: should we build in support for re-issuing the bind() call here? + // alert("alert we found a forward button call"); + var last = this.forwardStack.pop(); + if(!last){ return; } + if(last.kwArgs["forward"]){ + last.kwArgs.forward(); + }else if(last.kwArgs["forwardButton"]){ + last.kwArgs.forwardButton(); + }else if(last.kwArgs["handle"]){ + last.kwArgs.handle("forward"); + } + this.historyStack.push(last); + } + + this.inFlight = []; + this.inFlightTimer = null; + + this.startWatchingInFlight = function(){ + if(!this.inFlightTimer){ + this.inFlightTimer = setInterval("dojo.io.XMLHTTPTransport.watchInFlight();", 10); + } + } + + this.watchInFlight = function(){ + for(var x=this.inFlight.length-1; x>=0; x--){ + var tif = this.inFlight[x]; + if(!tif){ this.inFlight.splice(x, 1); continue; } + if(4==tif.http.readyState){ + // remove it so we can clean refs + this.inFlight.splice(x, 1); + doLoad(tif.req, tif.http, tif.url, tif.query, tif.useCache); + if(this.inFlight.length == 0){ + clearInterval(this.inFlightTimer); + this.inFlightTimer = null; + } + } // FIXME: need to implement a timeout param here! + } + } + + var hasXmlHttp = dojo.hostenv.getXmlhttpObject() ? true : false; + this.canHandle = function(kwArgs){ + // canHandle just tells dojo.io.bind() if this is a good transport to + // use for the particular type of request. + + // FIXME: we need to determine when form values need to be + // multi-part mime encoded and avoid using this transport for those + // requests. + return hasXmlHttp + && dojo.lang.inArray((kwArgs["mimetype"]||"".toLowerCase()), ["text/plain", "text/html", "application/xml", "text/xml", "text/javascript", "text/json"]) + && dojo.lang.inArray(kwArgs["method"].toLowerCase(), ["post", "get", "head"]) + && !( kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"]) ); + } + + this.multipartBoundary = "45309FFF-BD65-4d50-99C9-36986896A96F"; // unique guid as a boundary value for multipart posts + + this.bind = function(kwArgs){ + if(!kwArgs["url"]){ + // are we performing a history action? + if( !kwArgs["formNode"] + && (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"] || kwArgs["watchForURL"]) + && (!djConfig.preventBackButtonFix)) { + this.addToHistory(kwArgs); + return true; + } + } + + // build this first for cache purposes + var url = kwArgs.url; + var query = ""; + if(kwArgs["formNode"]){ + var ta = kwArgs.formNode.getAttribute("action"); + if((ta)&&(!kwArgs["url"])){ url = ta; } + var tp = kwArgs.formNode.getAttribute("method"); + if((tp)&&(!kwArgs["method"])){ kwArgs.method = tp; } + query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding); + } + + if(url.indexOf("#") > -1) { + dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url); + url = url.split("#")[0]; + } + + if(kwArgs["file"]){ + // force post for file transfer + kwArgs.method = "post"; + } + + if(!kwArgs["method"]){ + kwArgs.method = "get"; + } + + // guess the multipart value + if(kwArgs.method.toLowerCase() == "get"){ + // GET cannot use multipart + kwArgs.multipart = false; + }else{ + if(kwArgs["file"]){ + // enforce multipart when sending files + kwArgs.multipart = true; + }else if(!kwArgs["multipart"]){ + // default + kwArgs.multipart = false; + } + } + + if(kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]){ + this.addToHistory(kwArgs); + } + + var content = kwArgs["content"] || {}; + + if(kwArgs.sendTransport) { + content["dojo.transport"] = "xmlhttp"; + } + + do { // break-block + if(kwArgs.postContent){ + query = kwArgs.postContent; + break; + } + + if(content) { + query += dojo.io.argsFromMap(content, kwArgs.encoding); + } + + if(kwArgs.method.toLowerCase() == "get" || !kwArgs.multipart){ + break; + } + + var t = []; + if(query.length){ + var q = query.split("&"); + for(var i = 0; i < q.length; ++i){ + if(q[i].length){ + var p = q[i].split("="); + t.push( "--" + this.multipartBoundary, + "Content-Disposition: form-data; name=\"" + p[0] + "\"", + "", + p[1]); + } + } + } + + if(kwArgs.file){ + if(dojo.lang.isArray(kwArgs.file)){ + for(var i = 0; i < kwArgs.file.length; ++i){ + var o = kwArgs.file[i]; + t.push( "--" + this.multipartBoundary, + "Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"", + "Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"), + "", + o.content); + } + }else{ + var o = kwArgs.file; + t.push( "--" + this.multipartBoundary, + "Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"", + "Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"), + "", + o.content); + } + } + + if(t.length){ + t.push("--"+this.multipartBoundary+"--", ""); + query = t.join("\r\n"); + } + }while(false); + + // kwArgs.Connection = "close"; + + var async = kwArgs["sync"] ? false : true; + + var preventCache = kwArgs["preventCache"] || + (this.preventCache == true && kwArgs["preventCache"] != false); + var useCache = kwArgs["useCache"] == true || + (this.useCache == true && kwArgs["useCache"] != false ); + + // preventCache is browser-level (add query string junk), useCache + // is for the local cache. If we say preventCache, then don't attempt + // to look in the cache, but if useCache is true, we still want to cache + // the response + if(!preventCache && useCache){ + var cachedHttp = getFromCache(url, query, kwArgs.method); + if(cachedHttp){ + doLoad(kwArgs, cachedHttp, url, query, false); + return; + } + } + + // much of this is from getText, but reproduced here because we need + // more flexibility + var http = dojo.hostenv.getXmlhttpObject(); + var received = false; + + // build a handler function that calls back to the handler obj + if(async){ + // FIXME: setting up this callback handler leaks on IE!!! + this.inFlight.push({ + "req": kwArgs, + "http": http, + "url": url, + "query": query, + "useCache": useCache + }); + this.startWatchingInFlight(); + } + + if(kwArgs.method.toLowerCase() == "post"){ + // FIXME: need to hack in more flexible Content-Type setting here! + http.open("POST", url, async); + setHeaders(http, kwArgs); + http.setRequestHeader("Content-Type", kwArgs.multipart ? ("multipart/form-data; boundary=" + this.multipartBoundary) : + (kwArgs.contentType || "application/x-www-form-urlencoded")); + http.send(query); + }else{ + var tmpUrl = url; + if(query != "") { + tmpUrl += (tmpUrl.indexOf("?") > -1 ? "&" : "?") + query; + } + if(preventCache) { + tmpUrl += (dojo.string.endsWithAny(tmpUrl, "?", "&") + ? "" : (tmpUrl.indexOf("?") > -1 ? "&" : "?")) + "dojo.preventCache=" + new Date().valueOf(); + } + http.open(kwArgs.method.toUpperCase(), tmpUrl, async); + setHeaders(http, kwArgs); + http.send(null); + } + + if( !async ) { + doLoad(kwArgs, http, url, query, useCache); + } + + kwArgs.abort = function(){ + return http.abort(); + } + + return; + } + dojo.io.transports.addTransport("XMLHTTPTransport"); +} diff --git a/core/src/main/resources/org/apache/struts2/static/dojo/src/dom.js b/core/src/main/resources/org/apache/struts2/static/dojo/src/dom.js index daa12f28c..2fe223a69 100644 --- a/core/src/main/resources/org/apache/struts2/static/dojo/src/dom.js +++ b/core/src/main/resources/org/apache/struts2/static/dojo/src/dom.js @@ -288,11 +288,11 @@ dojo.dom.createDocumentFromText = function(str, mimetype){ var mtype = "text/xml"; var xml = ''+str; var url = "data:"+mtype+";charset=utf-8,"+encodeURIComponent(xml); - var req = new XMLHttpRequest(); - req.open("GET", url, false); - req.overrideMimeType(mtype); - req.send(null); - return req.responseXML; + var request = new XMLHttpRequest(); + request.open("GET", url, false); + request.overrideMimeType(mtype); + request.send(null); + return request.responseXML; */ }else if(document.createElement){ // FIXME: this may change all tags to uppercase! diff --git a/core/src/main/resources/org/apache/struts2/static/dojo/src/iCalendar.js b/core/src/main/resources/org/apache/struts2/static/dojo/src/iCalendar.js index e615b1421..787f572a3 100644 --- a/core/src/main/resources/org/apache/struts2/static/dojo/src/iCalendar.js +++ b/core/src/main/resources/org/apache/struts2/static/dojo/src/iCalendar.js @@ -179,8 +179,8 @@ dojo.iCalendar.VJOURNAL = function () {} dojo.iCalendar.VFREEBUSY = function () {} dojo.iCalendar.VTIMEZONE = function () {} -var _ = function (n, oc, req) { - return {name: n, required: (req) ? true : false, +var _ = function (n, oc, request) { + return {name: n, required: (request) ? true : false, occurance: (oc == '*' || !oc) ? -1 : oc} } diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml index 57b9d8c94..b70dee6f1 100644 --- a/core/src/main/resources/struts-default.xml +++ b/core/src/main/resources/struts-default.xml @@ -19,10 +19,10 @@ - + @@ -50,6 +50,7 @@ + diff --git a/core/src/main/resources/template/ajax/head.ftl b/core/src/main/resources/template/ajax/head.ftl index e6ece2fdf..a2415cb32 100644 --- a/core/src/main/resources/template/ajax/head.ftl +++ b/core/src/main/resources/template/ajax/head.ftl @@ -1,6 +1,6 @@ <#--include "/${parameters.templateDir}/xhtml/head.ftl" /--> <#include "/${parameters.templateDir}/${themeProperties.parent}/head.ftl" /> + src="<@s.url includeParams='none' value='/struts/ajax/dojoRequire.js' includeParams="none" encode='false' />"> + src="<@s.url includeParams='none' value='/struts/CommonFunctions.js' includeParams="none" encode='false'/>"> diff --git a/core/src/main/resources/template/ajax/submit-ajax.ftl b/core/src/main/resources/template/ajax/submit-ajax.ftl index 109688ce0..6eb25c2ca 100644 --- a/core/src/main/resources/template/ajax/submit-ajax.ftl +++ b/core/src/main/resources/template/ajax/submit-ajax.ftl @@ -11,7 +11,7 @@ name="${parameters.name?html}"<#rt/> <#if parameters.nameValue?exists> - value="<@saf.property value="parameters.nameValue"/>"<#rt/> + value="<@s.property value="parameters.nameValue"/>"<#rt/> <#if parameters.cssClass?exists> class="${parameters.cssClass?html}"<#rt/> @@ -35,7 +35,7 @@ listenTopics="${parameters.listenTopics}"<#rt/> <#include "/${parameters.templateDir}/simple/scripting-events.ftl"/> -><#if parameters.nameValue?exists><@saf.property value="parameters.nameValue"/><#rt/> +><#if parameters.nameValue?exists><@s.property value="parameters.nameValue"/><#rt/> <#--include "/${parameters.templateDir}/xhtml/controlfooter.ftl" /--> <#include "/${parameters.templateDir}/${themeProperties.parent}/controlfooter.ftl" /> diff --git a/core/src/main/resources/template/ajax/textarea.ftl b/core/src/main/resources/template/ajax/textarea.ftl index a949e702e..1d9d66e34 100644 --- a/core/src/main/resources/template/ajax/textarea.ftl +++ b/core/src/main/resources/template/ajax/textarea.ftl @@ -37,7 +37,7 @@ <#include "/${parameters.templateDir}/simple/scripting-events.ftl" /> ><#rt/> <#if parameters.nameValue?exists> -<@saf.property value="parameters.nameValue"/><#t/> +<@s.property value="parameters.nameValue"/><#t/> diff --git a/core/src/main/resources/template/ajax/tree.ftl b/core/src/main/resources/template/ajax/tree.ftl index 9e011029e..1b04e0481 100644 --- a/core/src/main/resources/template/ajax/tree.ftl +++ b/core/src/main/resources/template/ajax/tree.ftl @@ -8,46 +8,46 @@
      - gridIconSrcT="<@saf.url value='${parameters.blankIconSrc}' encode="false" />" + gridIconSrcT="<@s.url value='${parameters.blankIconSrc}' encode="false" />" <#if parameters.gridIconSrcL?exists> - gridIconSrcL="<@saf.url value='${parameters.gridIconSrcL}' encode="false" />" + gridIconSrcL="<@s.url value='${parameters.gridIconSrcL}' encode="false" />" <#if parameters.gridIconSrcV?exists> - gridIconSrcV="<@saf.url value='${parameters.gridIconSrcV}' encode="false" />" + gridIconSrcV="<@s.url value='${parameters.gridIconSrcV}' encode="false" />" <#if parameters.gridIconSrcP?exists> - gridIconSrcP="<@saf.url value='${parameters.gridIconSrcP}' encode="false" />" + gridIconSrcP="<@s.url value='${parameters.gridIconSrcP}' encode="false" />" <#if parameters.gridIconSrcC?exists> - gridIconSrcC="<@saf.url value='${parameters.gridIconSrcC}' encode="false" />" + gridIconSrcC="<@s.url value='${parameters.gridIconSrcC}' encode="false" />" <#if parameters.gridIconSrcX?exists> - gridIconSrcX="<@saf.url value='${parameters.gridIconSrcX}' encode="false" />" + gridIconSrcX="<@s.url value='${parameters.gridIconSrcX}' encode="false" />" <#if parameters.gridIconSrcY?exists> - gridIconSrcY="<@saf.url value='${parameters.gridIconSrcY}' encode="false" />" + gridIconSrcY="<@s.url value='${parameters.gridIconSrcY}' encode="false" />" <#if parameters.gridIconSrcZ?exists> - gridIconSrcZ="<@saf.url value='${parameters.gridIconSrcZ}' encode="false" />" + gridIconSrcZ="<@s.url value='${parameters.gridIconSrcZ}' encode="false" />" <#if parameters.expandIconSrcPlus?exists> - expandIconSrcPlus="<@saf.url value='${parameters.expandIconSrcPlus}' />" + expandIconSrcPlus="<@s.url value='${parameters.expandIconSrcPlus}' />" <#if parameters.expandIconSrcMinus?exists> - expandIconSrcMinus="<@saf.url value='${parameters.expandIconSrcMinus?html}' />" + expandIconSrcMinus="<@s.url value='${parameters.expandIconSrcMinus?html}' />" <#if parameters.iconWidth?exists> - iconWidth="<@saf.url value='${parameters.iconWidth?html}' encode="false" />" + iconWidth="<@s.url value='${parameters.iconWidth?html}' encode="false" />" <#if parameters.iconHeight?exists> - iconHeight="<@saf.url value='${parameters.iconHeight?html}' encode="false" />" + iconHeight="<@s.url value='${parameters.iconHeight?html}' encode="false" />" <#if parameters.toggleDuration?exists> toggleDuration=${parameters.toggleDuration?c} <#if parameters.templateCssPath?exists> - templateCssPath="<@saf.url value='${parameters.templateCssPath}' encode="false" />" + templateCssPath="<@s.url value='${parameters.templateCssPath}' encode="false" />" <#if parameters.showGrid?exists> showGrid="${parameters.showGrid?default(true)?string}" diff --git a/core/src/main/resources/template/ajax/treenode.ftl b/core/src/main/resources/template/ajax/treenode.ftl index b24fc2ee2..6125c1a1e 100644 --- a/core/src/main/resources/template/ajax/treenode.ftl +++ b/core/src/main/resources/template/ajax/treenode.ftl @@ -1,6 +1,6 @@
      - childIconSrc="<@saf.url value='${parameters.childIconSrc}' encode="false" />" + childIconSrc="<@s.url value='${parameters.childIconSrc}' encode="false" />" <#if parameters.id?exists>id="${parameters.id?html}" title="${parameters.label}"> diff --git a/core/src/main/resources/template/css_xhtml/head.ftl b/core/src/main/resources/template/css_xhtml/head.ftl index a8894bdec..435627630 100644 --- a/core/src/main/resources/template/css_xhtml/head.ftl +++ b/core/src/main/resources/template/css_xhtml/head.ftl @@ -1,2 +1,2 @@ -" type="text/css"/> +" type="text/css"/> <#include "/${parameters.templateDir}/simple/head.ftl" /> diff --git a/core/src/main/resources/template/css_xhtml/label.ftl b/core/src/main/resources/template/css_xhtml/label.ftl index c7255d4bc..9b08a6630 100644 --- a/core/src/main/resources/template/css_xhtml/label.ftl +++ b/core/src/main/resources/template/css_xhtml/label.ftl @@ -18,7 +18,7 @@ ><#rt/> <#if parameters.nameValue?exists> -<@saf.property value="parameters.nameValue"/><#t/> +<@s.property value="parameters.nameValue"/><#t/>   diff --git a/core/src/main/resources/template/simple/checkboxlist.ftl b/core/src/main/resources/template/simple/checkboxlist.ftl index fef54f4ec..c19894173 100644 --- a/core/src/main/resources/template/simple/checkboxlist.ftl +++ b/core/src/main/resources/template/simple/checkboxlist.ftl @@ -1,6 +1,6 @@ <#assign itemCount = 0/> <#if parameters.list?exists> - <@saf.iterator value="parameters.list"> + <@s.iterator value="parameters.list"> <#assign itemCount = itemCount + 1/> <#if parameters.listKey?exists> <#assign itemKey = stack.findValue(parameters.listKey)/> @@ -27,7 +27,7 @@ <#include "/${parameters.templateDir}/simple/common-attributes.ftl" /> /> - + <#else>   diff --git a/core/src/main/resources/template/simple/combobox.ftl b/core/src/main/resources/template/simple/combobox.ftl index b79f36360..36653afc2 100644 --- a/core/src/main/resources/template/simple/combobox.ftl +++ b/core/src/main/resources/template/simple/combobox.ftl @@ -27,7 +27,7 @@ <#if parameters.emptyOption?default(false)> - <@saf.iterator value="parameters.list"> + <@s.iterator value="parameters.list"> <#if parameters.listKey?exists> <#assign tmpListKey = stack.findString(parameters.listKey) /> <#else> @@ -45,6 +45,6 @@ ><#t/> ${tmpListValue?html}<#t/> <#lt/> - + diff --git a/core/src/main/resources/template/simple/datepicker.ftl b/core/src/main/resources/template/simple/datepicker.ftl index b5f141fc2..de02be59b 100644 --- a/core/src/main/resources/template/simple/datepicker.ftl +++ b/core/src/main/resources/template/simple/datepicker.ftl @@ -8,7 +8,7 @@ <#else> <#--
      dateFormat="${parameters.format}" @@ -38,7 +38,7 @@ <#if parameters.dateIconPath?exists> iconPath="${parameters.dateIconPath}" <#else> - iconPath="<@saf.url includeParams='none' value='/struts/dojo/struts/widgets/dateIcon.gif' encode='false' includeParams="none" />" + iconPath="<@s.url includeParams='none' value='/struts/dojo/struts/widgets/dateIcon.gif' encode='false' includeParams="none" />" <#if parameters.nameValue?exists> value="${parameters.nameValue?html}" diff --git a/core/src/main/resources/template/simple/doubleselect.ftl b/core/src/main/resources/template/simple/doubleselect.ftl index 55eb949f7..7168742f7 100644 --- a/core/src/main/resources/template/simple/doubleselect.ftl +++ b/core/src/main/resources/template/simple/doubleselect.ftl @@ -39,7 +39,7 @@ for (i = 0; i < (${parameters.listSize} + ${startCount}); i++) ${parameters.name}Group[i] = new Array(); -<@saf.iterator value="parameters.list"> +<@s.iterator value="parameters.list"> <#if parameters.listKey?exists> <#assign itemKey = stack.findValue(parameters.listKey)/> <#else> @@ -51,7 +51,7 @@ <#assign itemValue = stack.findString('top')/> <#assign doubleItemCount = 0/> - <@saf.iterator value="${parameters.doubleList}"> + <@s.iterator value="${parameters.doubleList}"> <#if parameters.doubleListKey?exists> <#assign doubleItemKey = stack.findValue(parameters.doubleListKey)/> <#else> @@ -65,14 +65,14 @@ ${parameters.name}Group[${itemCount}][${doubleItemCount}] = new Option("${doubleItemValue}", "${doubleItemKey}"); <#assign doubleItemCount = doubleItemCount + 1/> - + <#assign itemCount = itemCount + 1/> - + var ${parameters.name}Temp = document.${parameters.formName}.${parameters.doubleName}; <#assign itemCount = startCount/> <#assign redirectTo = 0/> -<@saf.iterator value="parameters.list"> +<@s.iterator value="parameters.list"> <#if parameters.listKey?exists> <#assign itemKey = stack.findValue(parameters.listKey)/> <#else> @@ -82,7 +82,7 @@ <#assign redirectTo = itemCount/> <#assign itemCount = itemCount + 1/> - + ${parameters.name}Redirect(${redirectTo}); function ${parameters.name}Redirect(x) { var selected = false; diff --git a/core/src/main/resources/template/simple/file.ftl b/core/src/main/resources/template/simple/file.ftl index 2690e4b0b..02cf84c66 100644 --- a/core/src/main/resources/template/simple/file.ftl +++ b/core/src/main/resources/template/simple/file.ftl @@ -4,7 +4,7 @@ size="${parameters.get("size")?html}"<#rt/> <#if parameters.nameValue?exists> - value="<@saf.property value="parameters.nameValue"/>"<#rt/> + value="<@s.property value="parameters.nameValue"/>"<#rt/> <#if parameters.disabled?default(false)> disabled="disabled"<#rt/> diff --git a/core/src/main/resources/template/simple/form-close.ftl b/core/src/main/resources/template/simple/form-close.ftl index 5152fa176..4340c3b87 100644 --- a/core/src/main/resources/template/simple/form-close.ftl +++ b/core/src/main/resources/template/simple/form-close.ftl @@ -68,5 +68,7 @@ dojo.require("dojo.event.connect"); <#-- Code that will add javascript needed for tooltips --><#t/> +<#if (parameters.hasTooltip?default(false))><#t/> <#lt/> <#lt/> +<#t/> diff --git a/core/src/main/resources/template/simple/form.ftl b/core/src/main/resources/template/simple/form.ftl index a2927c96f..11828179e 100644 --- a/core/src/main/resources/template/simple/form.ftl +++ b/core/src/main/resources/template/simple/form.ftl @@ -26,7 +26,8 @@ <#if parameters.method?exists> method="${parameters.method?html}"<#rt/> -<#else>method="POST"<#rt/> +<#else> + method="POST"<#rt/> <#if parameters.enctype?exists> enctype="${parameters.enctype?html}"<#rt/> diff --git a/core/src/main/resources/template/simple/head.ftl b/core/src/main/resources/template/simple/head.ftl index aa71a386b..59ed379c9 100644 --- a/core/src/main/resources/template/simple/head.ftl +++ b/core/src/main/resources/template/simple/head.ftl @@ -1,13 +1,13 @@ + src="<@s.url includeParams='none' value='/struts/dojo/dojo.js' includeParams="none" encode='false'/>"> + src="<@s.url includeParams='none' value='/struts/simple/dojoRequire.js' includeParams="none" encode='false'/>"> diff --git a/core/src/main/resources/template/simple/hidden.ftl b/core/src/main/resources/template/simple/hidden.ftl index a05dcd707..2755cb3fe 100644 --- a/core/src/main/resources/template/simple/hidden.ftl +++ b/core/src/main/resources/template/simple/hidden.ftl @@ -1,7 +1,7 @@ name="${parameters.name?default("")?html}"<#rt/> <#if parameters.nameValue?exists> - value="<@saf.property value="parameters.nameValue"/>"<#rt/> + value="<@s.property value="parameters.nameValue"/>"<#rt/> <#if parameters.id?exists> id="${parameters.id?html}"<#rt/> diff --git a/core/src/main/resources/template/simple/label.ftl b/core/src/main/resources/template/simple/label.ftl index ae06a7865..89176328a 100644 --- a/core/src/main/resources/template/simple/label.ftl +++ b/core/src/main/resources/template/simple/label.ftl @@ -17,6 +17,6 @@ <#include "/${parameters.templateDir}/simple/common-attributes.ftl" /> ><#rt/> <#if parameters.nameValue?exists> -<@saf.property value="parameters.nameValue"/><#t/> +<@s.property value="parameters.nameValue"/><#t/> diff --git a/core/src/main/resources/template/simple/optiontransferselect.ftl b/core/src/main/resources/template/simple/optiontransferselect.ftl index a613d087e..fa9993708 100644 --- a/core/src/main/resources/template/simple/optiontransferselect.ftl +++ b/core/src/main/resources/template/simple/optiontransferselect.ftl @@ -1,5 +1,5 @@ <#if !stack.findValue("#optiontransferselect_js_included")?exists><#t/> - + <#assign temporaryVariable = stack.setValue("#optiontransferselect_js_included", "true") /><#t/> <#t/> @@ -239,7 +239,7 @@ <#if parameters.doubleEmptyOption?default(false)><#t/> <#t/> - <@saf.iterator value="parameters.doubleList"><#t/> + <@s.iterator value="parameters.doubleList"><#t/> <#if parameters.doubleListKey?exists><#t/> <#assign doubleItemKey = stack.findValue(parameters.doubleListKey) /><#t/> <#else><#t/> @@ -256,7 +256,7 @@ selected="selected"<#rt/> <#t/> >${doubleItemValue?html}<#lt/> - <#t/> + <#t/> <#if parameters.allowUpDownOnRight?default(true)> <#if parameters.nameValue?exists && parameters.showPassword?default(false)> - value="<@saf.property value="parameters.nameValue"/>"<#rt/> + value="<@s.property value="parameters.nameValue"/>"<#rt/> <#if parameters.disabled?default(false)> disabled="disabled"<#rt/> diff --git a/core/src/main/resources/template/simple/radiomap.ftl b/core/src/main/resources/template/simple/radiomap.ftl index af3e3ae17..c76a1a81e 100644 --- a/core/src/main/resources/template/simple/radiomap.ftl +++ b/core/src/main/resources/template/simple/radiomap.ftl @@ -1,4 +1,4 @@ -<@saf.iterator value="parameters.list"> +<@s.iterator value="parameters.list"> <#if parameters.listKey?exists> <#assign itemKey = stack.findString(parameters.listKey)/> <#else> @@ -37,4 +37,4 @@ - + diff --git a/core/src/main/resources/template/simple/reset.ftl b/core/src/main/resources/template/simple/reset.ftl index 3544030c9..cfa034d74 100644 --- a/core/src/main/resources/template/simple/reset.ftl +++ b/core/src/main/resources/template/simple/reset.ftl @@ -4,7 +4,7 @@ name="${parameters.name?html}"<#rt/> <#if parameters.nameValue?exists> - value="<@saf.property value="parameters.nameValue"/>"<#rt/> + value="<@s.property value="parameters.nameValue"/>"<#rt/> <#if parameters.cssClass?exists> class="${parameters.cssClass?html}"<#rt/> @@ -14,14 +14,14 @@ <#include "/${parameters.templateDir}/simple/scripting-events.ftl"/> <#include "/${parameters.templateDir}/simple/common-attributes.ftl" /> -><#if parameters.label?exists><@saf.property value="parameters.label"/><#rt/> +><#if parameters.label?exists><@s.property value="parameters.label"/><#rt/> <#else> <#if parameters.name?exists> name="${parameters.name?html}"<#rt/> <#if parameters.nameValue?exists> - value="<@saf.property value="parameters.nameValue"/>"<#rt/> + value="<@s.property value="parameters.nameValue"/>"<#rt/> <#if parameters.cssClass?exists> class="${parameters.cssClass?html}"<#rt/> diff --git a/core/src/main/resources/template/simple/select.ftl b/core/src/main/resources/template/simple/select.ftl index 5c53ec706..b8f8dbe43 100644 --- a/core/src/main/resources/template/simple/select.ftl +++ b/core/src/main/resources/template/simple/select.ftl @@ -33,7 +33,7 @@ <#if parameters.emptyOption?default(false)> -<@saf.iterator value="parameters.list"> +<@s.iterator value="parameters.list"> <#if parameters.listKey?exists> <#assign itemKey = stack.findValue(parameters.listKey)/> <#else> @@ -50,7 +50,7 @@ selected="selected"<#rt/> >${itemValue?html}<#lt/> - + <#include "/${parameters.templateDir}/simple/optgroup.ftl" /> diff --git a/core/src/main/resources/template/simple/submit.ftl b/core/src/main/resources/template/simple/submit.ftl index d62b96f4c..b20d77133 100644 --- a/core/src/main/resources/template/simple/submit.ftl +++ b/core/src/main/resources/template/simple/submit.ftl @@ -7,7 +7,7 @@ name="${parameters.name?html}"<#rt/> <#if parameters.nameValue?exists> - value="<@saf.property value="parameters.nameValue"/>"<#rt/> + value="<@s.property value="parameters.nameValue"/>"<#rt/> <#if parameters.cssClass?exists> class="${parameters.cssClass?html}"<#rt/> @@ -17,7 +17,7 @@ <#include "/${parameters.templateDir}/simple/scripting-events.ftl"/> <#include "/${parameters.templateDir}/simple/common-attributes.ftl" /> -><#if parameters.label?exists><@saf.property value="parameters.label"/><#rt/> +><#if parameters.label?exists><@s.property value="parameters.label"/><#rt/> <#else> <#if parameters.type?exists && parameters.type=="image"> @@ -37,7 +37,7 @@ name="${parameters.name?html}"<#rt/> <#if parameters.nameValue?exists> - value="<@saf.property value="parameters.nameValue"/>"<#rt/> + value="<@s.property value="parameters.nameValue"/>"<#rt/> <#if parameters.cssClass?exists> class="${parameters.cssClass?html}"<#rt/> diff --git a/core/src/main/resources/template/simple/tabbedpanel-close.ftl b/core/src/main/resources/template/simple/tabbedpanel-close.ftl index bb8b78001..95fdafd99 100644 --- a/core/src/main/resources/template/simple/tabbedpanel-close.ftl +++ b/core/src/main/resources/template/simple/tabbedpanel-close.ftl @@ -3,11 +3,11 @@ + <#assign temporaryVariable = stack.setValue("#optiontransferselect_js_included", "true") /><#t/> <#t/>
      diff --git a/core/src/main/resources/template/xhtml/checkbox.ftl b/core/src/main/resources/template/xhtml/checkbox.ftl index 0582b04ae..8a11aead2 100644 --- a/core/src/main/resources/template/xhtml/checkbox.ftl +++ b/core/src/main/resources/template/xhtml/checkbox.ftl @@ -66,7 +66,7 @@ ${parameters.label?html}<#t/> :<#t/> <#if parameters.tooltip?exists> - ${parameters.tooltip} + ${parameters.tooltip}<#t/> @@ -76,7 +76,7 @@ ${parameters.label?html}<#t/> *<#t/> <#if parameters.tooltip?exists> - ${parameters.tooltip} + ${parameters.tooltip} diff --git a/core/src/main/resources/template/xhtml/head.ftl b/core/src/main/resources/template/xhtml/head.ftl index 96a9f309c..66969bf7f 100644 --- a/core/src/main/resources/template/xhtml/head.ftl +++ b/core/src/main/resources/template/xhtml/head.ftl @@ -1,2 +1,2 @@ -" type="text/css"/> +" type="text/css"/> <#include "/${parameters.templateDir}/simple/head.ftl" /> diff --git a/core/src/main/resources/template/xhtml/tooltip.ftl b/core/src/main/resources/template/xhtml/tooltip.ftl index e65110429..4851d6d5a 100644 --- a/core/src/main/resources/template/xhtml/tooltip.ftl +++ b/core/src/main/resources/template/xhtml/tooltip.ftl @@ -2,9 +2,9 @@ <#assign tooltipHashCode=parameters.tooltip.hashCode() /> <#t/> - src='<@saf.url value="${parameters.tooltipIcon}" />' + src='<@s.url value="${parameters.tooltipIcon}" />' <#else><#t/> - src='<@saf.url value="/struts/dojo/struts/tooltip.gif" />' + src='<@s.url value="/struts/dojo/struts/tooltip.gif" />' <#t/> alt="${parameters.tooltip?html}" title="${parameters.tooltip?html}" /> diff --git a/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java b/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java index 7b4b8f7fb..496ba874f 100644 --- a/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java +++ b/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java @@ -17,11 +17,10 @@ */ package org.apache.struts2; +import com.opensymphony.xwork2.ActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.opensymphony.xwork2.ActionSupport; - /** * ExecutionCountTestAction diff --git a/core/src/test/java/org/apache/struts2/RequestUtilsTest.java b/core/src/test/java/org/apache/struts2/RequestUtilsTest.java index 6ab4480de..5b345487e 100644 --- a/core/src/test/java/org/apache/struts2/RequestUtilsTest.java +++ b/core/src/test/java/org/apache/struts2/RequestUtilsTest.java @@ -21,10 +21,10 @@ package org.apache.struts2; * RequestUtilsTest * */ -import javax.servlet.http.HttpServletRequest; - import junit.framework.TestCase; +import javax.servlet.http.HttpServletRequest; + import org.easymock.MockControl; public class RequestUtilsTest extends TestCase { diff --git a/core/src/test/java/org/apache/struts2/ServletActionContextTest.java b/core/src/test/java/org/apache/struts2/ServletActionContextTest.java index d3f1b90fc..6e8cc364d 100644 --- a/core/src/test/java/org/apache/struts2/ServletActionContextTest.java +++ b/core/src/test/java/org/apache/struts2/ServletActionContextTest.java @@ -17,18 +17,16 @@ */ package org.apache.struts2; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import junit.framework.TestCase; - import com.mockobjects.servlet.MockHttpServletRequest; import com.mockobjects.servlet.MockHttpServletResponse; import com.mockobjects.servlet.MockServletContext; import com.opensymphony.xwork2.ActionContext; +import junit.framework.TestCase; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; /** diff --git a/core/src/test/java/org/apache/struts2/TestAction.java b/core/src/test/java/org/apache/struts2/TestAction.java index ac4394397..f1ca56cb3 100644 --- a/core/src/test/java/org/apache/struts2/TestAction.java +++ b/core/src/test/java/org/apache/struts2/TestAction.java @@ -17,15 +17,14 @@ */ package org.apache.struts2; +import org.apache.struts2.views.jsp.ui.User; +import com.opensymphony.xwork2.Action; +import com.opensymphony.xwork2.ActionSupport; + import java.util.Collection; import java.util.List; import java.util.Map; -import org.apache.struts2.views.jsp.ui.User; - -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionSupport; - /** */ diff --git a/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java b/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java index f01825244..70ef6c8a4 100644 --- a/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java +++ b/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java @@ -17,25 +17,24 @@ */ package org.apache.struts2; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.apache.struts2.dispatcher.ServletDispatcherResult; import org.apache.struts2.interceptor.TokenInterceptor; import org.apache.struts2.interceptor.TokenSessionStoreInterceptor; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionChainResult; import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.config.ConfigurationProvider; import com.opensymphony.xwork2.config.entities.ActionConfig; -import com.opensymphony.xwork2.config.entities.InterceptorMapping; import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.config.entities.ResultConfig; +import com.opensymphony.xwork2.config.entities.InterceptorMapping; import com.opensymphony.xwork2.interceptor.ParametersInterceptor; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * TestConfigurationProvider provides a simple configuration class without the need for xml files, etc. for simple testing. diff --git a/core/src/test/java/org/apache/struts2/TestResult.java b/core/src/test/java/org/apache/struts2/TestResult.java index 13455fd61..fd55127d4 100644 --- a/core/src/test/java/org/apache/struts2/TestResult.java +++ b/core/src/test/java/org/apache/struts2/TestResult.java @@ -17,18 +17,16 @@ */ package org.apache.struts2; -import java.util.ArrayList; -import java.util.List; - -import junit.framework.Assert; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.Result; import com.opensymphony.xwork2.util.OgnlValueStack; +import junit.framework.Assert; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.ArrayList; +import java.util.List; /** diff --git a/core/src/test/java/org/apache/struts2/components/ComponentTest.java b/core/src/test/java/org/apache/struts2/components/ComponentTest.java index e911c7133..365947cf2 100644 --- a/core/src/test/java/org/apache/struts2/components/ComponentTest.java +++ b/core/src/test/java/org/apache/struts2/components/ComponentTest.java @@ -19,6 +19,7 @@ package org.apache.struts2.components; import java.util.Iterator; import java.util.Locale; +import java.util.ResourceBundle; import java.util.Stack; import javax.servlet.jsp.tagext.TagSupport; @@ -39,7 +40,6 @@ import org.apache.struts2.views.jsp.iterator.AppendIteratorTag; import org.apache.struts2.views.jsp.iterator.MergeIteratorTag; import org.apache.struts2.views.jsp.ui.TextFieldTag; import org.apache.struts2.views.jsp.ui.UpDownSelectTag; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.LocalizedTextUtil; @@ -435,6 +435,7 @@ public class ComponentTest extends AbstractTagTest { t.setPageContext(pageContext); t.setName("textFieldName"); + ResourceBundle bundle = ResourceBundle.getBundle("org.apache.struts2.components.tempo"); LocalizedTextUtil.addDefaultResourceBundle("org.apache.struts2.components.temp"); I18nTag tag = new I18nTag(); diff --git a/core/src/test/java/org/apache/struts2/components/FormTest.java b/core/src/test/java/org/apache/struts2/components/FormTest.java index f39387e7f..ff1b762ce 100644 --- a/core/src/test/java/org/apache/struts2/components/FormTest.java +++ b/core/src/test/java/org/apache/struts2/components/FormTest.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.components; -import java.util.List; - -import org.apache.struts2.TestAction; import org.apache.struts2.views.jsp.AbstractUITagTest; - +import org.apache.struts2.TestAction; import com.opensymphony.xwork2.validator.validators.RequiredFieldValidator; +import java.util.List; + /** * FormTest * diff --git a/core/src/test/java/org/apache/struts2/components/PropertyTest.java b/core/src/test/java/org/apache/struts2/components/PropertyTest.java index ae329d443..d7c7a087d 100644 --- a/core/src/test/java/org/apache/struts2/components/PropertyTest.java +++ b/core/src/test/java/org/apache/struts2/components/PropertyTest.java @@ -17,16 +17,15 @@ */ package org.apache.struts2.components; -import java.io.StringWriter; -import java.util.Map; - -import junit.framework.TestCase; -import ognl.Ognl; - +import org.apache.struts2.components.Property; import org.apache.struts2.util.StrutsTypeConverter; - import com.opensymphony.xwork2.util.OgnlValueStack; import com.opensymphony.xwork2.util.XWorkConverter; +import junit.framework.TestCase; +import ognl.Ognl; + +import java.io.StringWriter; +import java.util.Map; /** * diff --git a/core/src/test/java/org/apache/struts2/components/UIComponentTest.java b/core/src/test/java/org/apache/struts2/components/UIComponentTest.java index b30647ebe..3669a120d 100644 --- a/core/src/test/java/org/apache/struts2/components/UIComponentTest.java +++ b/core/src/test/java/org/apache/struts2/components/UIComponentTest.java @@ -17,30 +17,10 @@ */ package org.apache.struts2.components; +import com.opensymphony.xwork2.ActionContext; import org.apache.struts2.TestConfigurationProvider; import org.apache.struts2.views.jsp.AbstractUITagTest; -import org.apache.struts2.views.jsp.ui.ActionErrorTag; -import org.apache.struts2.views.jsp.ui.ActionMessageTag; -import org.apache.struts2.views.jsp.ui.AnchorTag; -import org.apache.struts2.views.jsp.ui.CheckboxTag; -import org.apache.struts2.views.jsp.ui.ComboBoxTag; -import org.apache.struts2.views.jsp.ui.DivTag; -import org.apache.struts2.views.jsp.ui.DoubleSelectTag; -import org.apache.struts2.views.jsp.ui.FieldErrorTag; -import org.apache.struts2.views.jsp.ui.FileTag; -import org.apache.struts2.views.jsp.ui.FormTag; -import org.apache.struts2.views.jsp.ui.HiddenTag; -import org.apache.struts2.views.jsp.ui.LabelTag; -import org.apache.struts2.views.jsp.ui.OptionTransferSelectTag; -import org.apache.struts2.views.jsp.ui.PasswordTag; -import org.apache.struts2.views.jsp.ui.RadioTag; -import org.apache.struts2.views.jsp.ui.SelectTag; -import org.apache.struts2.views.jsp.ui.SubmitTag; -import org.apache.struts2.views.jsp.ui.TextFieldTag; -import org.apache.struts2.views.jsp.ui.TextareaTag; -import org.apache.struts2.views.jsp.ui.TokenTag; - -import com.opensymphony.xwork2.ActionContext; +import org.apache.struts2.views.jsp.ui.*; /** diff --git a/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java b/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java index fb5aed3ed..7d569463c 100644 --- a/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java +++ b/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java @@ -21,6 +21,11 @@ import java.io.File; import java.net.URL; import java.util.Map; +import org.apache.struts2.components.template.BaseTemplateEngine; +import org.apache.struts2.components.template.Template; +import org.apache.struts2.components.template.TemplateEngine; +import org.apache.struts2.components.template.TemplateRenderingContext; + import junit.framework.TestCase; /** diff --git a/core/src/test/java/org/apache/struts2/config/SettingsTest.java b/core/src/test/java/org/apache/struts2/config/SettingsTest.java index 4641936ac..f3dc88236 100644 --- a/core/src/test/java/org/apache/struts2/config/SettingsTest.java +++ b/core/src/test/java/org/apache/struts2/config/SettingsTest.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.config; +import org.apache.struts2.StrutsTestCase; +import org.apache.struts2.StrutsConstants; +import com.opensymphony.xwork2.util.LocalizedTextUtil; + import java.util.Iterator; import java.util.Locale; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.StrutsTestCase; - -import com.opensymphony.xwork2.util.LocalizedTextUtil; - /** * Unit test for {@link SettingsTest}. @@ -44,7 +43,7 @@ public class SettingsTest extends StrutsTestCase { assertEquals("de", locale.getLanguage()); int count = getKeyCount(); - assertEquals(29, count); + assertEquals(30, count); } public void testDefaultResourceBundlesLoaded() { diff --git a/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java b/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java index 20d4d93ff..b4ac07d14 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java @@ -19,8 +19,16 @@ package org.apache.struts2.dispatcher; import java.util.Locale; -import org.apache.struts2.StrutsTestCase; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.struts2.StrutsTestCase; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; + +import org.apache.struts2.StrutsConstants; +import org.apache.struts2.config.Settings; +import org.apache.struts2.dispatcher.Dispatcher; import com.opensymphony.xwork2.util.LocalizedTextUtil; /** @@ -44,4 +52,30 @@ public class DispatcherTest extends StrutsTestCase { "Error uploading: some error messages"); } + public void testPrepareSetEncodingProperly() throws Exception { + HttpServletRequest req = new MockHttpServletRequest(); + HttpServletResponse res = new MockHttpServletResponse(); + + Settings.set(StrutsConstants.STRUTS_I18N_ENCODING, "utf-8"); + + + Dispatcher du = Dispatcher.getInstance(); + du.prepare(req, res); + + assertEquals(req.getCharacterEncoding(), "utf-8"); + } + + public void testPrepareSetEncodingPropertyWithMultipartRequest() throws Exception { + MockHttpServletRequest req = new MockHttpServletRequest(); + MockHttpServletResponse res = new MockHttpServletResponse(); + + req.setContentType("multipart/form-data"); + Settings.set(StrutsConstants.STRUTS_I18N_ENCODING, "utf-8"); + + + Dispatcher du = Dispatcher.getInstance(); + du.prepare(req, res); + + assertEquals(req.getCharacterEncoding(), "utf-8"); + } } diff --git a/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java b/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java index 99589ba8a..1c18ab8e4 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java @@ -17,21 +17,33 @@ */ package org.apache.struts2.dispatcher; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.ServletContext; +import com.mockobjects.servlet.MockFilterChain; +import com.opensymphony.xwork2.ObjectFactory; +import com.opensymphony.xwork2.config.Configuration; +import com.opensymphony.xwork2.config.ConfigurationManager; +import com.opensymphony.xwork2.config.impl.DefaultConfiguration; import org.apache.struts2.StrutsConstants; import org.apache.struts2.StrutsTestCase; import org.apache.struts2.config.Settings; +import org.apache.struts2.dispatcher.mapper.ActionMapper; +import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.util.ObjectFactoryDestroyable; import org.apache.struts2.util.ObjectFactoryInitializable; import org.apache.struts2.util.ObjectFactoryLifecycle; import org.springframework.mock.web.MockFilterConfig; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockServletContext; -import com.opensymphony.xwork2.ObjectFactory; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; /** * FilterDispatcher TestCase. @@ -117,9 +129,155 @@ public class FilterDispatcherTest extends StrutsTestCase { filterDispatcher.destroy(); assertTrue(((InnerInitailizableDestroyableObjectFactory) ObjectFactory.getObjectFactory()).destroyable); } + + public void testIfActionMapperIsNullDontServiceAction() throws Exception { + try { + MockServletContext servletContext = new MockServletContext(); + MockFilterConfig filterConfig = new MockFilterConfig(servletContext); + MockHttpServletRequest req = new MockHttpServletRequest(servletContext); + MockHttpServletResponse res = new MockHttpServletResponse(); + MockFilterChain chain = new MockFilterChain(); + final NoOpDispatcher dispatcher = new NoOpDispatcher(servletContext); + Dispatcher.setInstance(null); + + ConfigurationManager confManager = new ConfigurationManager(); + confManager.setConfiguration(new DefaultConfiguration()); + dispatcher.setConfigurationManager(confManager); + + + ObjectFactory.setObjectFactory(new InnerObjectFactory()); + + Map settings = new HashMap(); + settings.put(StrutsConstants.STRUTS_MAPPER_CLASS, "org.apache.struts2.dispatcher.FilterDispatcherTest$NullActionMapper"); + Settings.setInstance(new InnerConfiguration(settings)); + + FilterDispatcher filter = new FilterDispatcher() { + protected Dispatcher createDispatcher() { + return dispatcher; + } + }; + filter.init(filterConfig); + filter.doFilter(req, res, chain); + + assertFalse(dispatcher.serviceRequest); + } + finally { + Settings.reset(); + } + } + + public void testCharacterEncodingSetBeforeRequestWrappingAndActionService() throws Exception { + try { + MockServletContext servletContext = new MockServletContext(); + MockFilterConfig filterConfig = new MockFilterConfig(servletContext); + MockHttpServletRequest req = new MockHttpServletRequest(servletContext); + MockHttpServletResponse res = new MockHttpServletResponse(); + MockFilterChain chain = new MockFilterChain(); + final InnerDispatcher dispatcher = new InnerDispatcher(servletContext); + Dispatcher.setInstance(null); + + ConfigurationManager confManager = new ConfigurationManager(); + confManager.setConfiguration(new DefaultConfiguration()); + dispatcher.setConfigurationManager(confManager); + + + ObjectFactory.setObjectFactory(new InnerObjectFactory()); + + Map settings = new HashMap(); + settings.put(StrutsConstants.STRUTS_I18N_ENCODING, "UTF-16_DUMMY"); + settings.put(StrutsConstants.STRUTS_MAPPER_CLASS, "org.apache.struts2.dispatcher.FilterDispatcherTest$InnerActionMapper"); + Settings.setInstance(new InnerConfiguration(settings)); + + FilterDispatcher filter = new FilterDispatcher() { + protected Dispatcher createDispatcher() { + return dispatcher; + } + }; + filter.init(filterConfig); + filter.doFilter(req, res, chain); + + assertTrue(dispatcher.wrappedRequest); + assertTrue(dispatcher.serviceRequest); + } + finally { + Settings.reset(); + } + } // === inner class ======== + public static class InnerObjectFactory extends ObjectFactory { + + } + + public static class NoOpDispatcher extends Dispatcher { + protected boolean wrappedRequest = false; + protected boolean serviceRequest = false; + + public NoOpDispatcher(ServletContext servletContext) { + super(servletContext); + } + + public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException { + wrappedRequest = true; + return request; + } + + public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException { + serviceRequest = true; + } + } + + public static class InnerDispatcher extends Dispatcher { + + protected boolean wrappedRequest = false; + protected boolean serviceRequest = false; + + public InnerDispatcher(ServletContext servletContext) { + super(servletContext); + } + + public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException { + wrappedRequest = true; + // if we set the chracter encoding AFTER we do wrap request, we will get + // a failing test + assertNotNull(request.getCharacterEncoding()); + assertEquals(request.getCharacterEncoding(), "UTF-16_DUMMY"); + + return request; + } + + public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException { + serviceRequest = true; + // if we set the chracter encoding AFTER we do wrap request, we will get + // a failing test + assertNotNull(request.getCharacterEncoding()); + assertEquals(request.getCharacterEncoding(), "UTF-16_DUMMY"); + } + } + + public static class InnerActionMapper implements ActionMapper { + + public ActionMapping getMapping(HttpServletRequest request, Configuration config) { + return new ActionMapping(); + } + + public String getUriFromActionMapping(ActionMapping mapping) { + return null; + } + } + + public static class NullActionMapper implements ActionMapper { + public ActionMapping getMapping(HttpServletRequest request, Configuration config) { + return null; + } + + public String getUriFromActionMapping(ActionMapping mapping) { + return null; + } + } + + public static class InnerConfiguration extends Settings { Map m; @@ -142,7 +300,6 @@ public class FilterDispatcherTest extends StrutsTestCase { } } - public static class InnerDestroyableObjectFactory extends ObjectFactory implements ObjectFactoryDestroyable { public boolean destroyed = false; diff --git a/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java b/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java index 098e5982f..35b5d7e93 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java @@ -17,20 +17,19 @@ */ package org.apache.struts2.dispatcher; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsTestCase; - import com.mockobjects.dynamic.C; import com.mockobjects.dynamic.Mock; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsTestCase; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.OgnlUtil; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + /** * HttpHeaderResultTest diff --git a/core/src/test/java/org/apache/struts2/dispatcher/PlainTextResultTest.java b/core/src/test/java/org/apache/struts2/dispatcher/PlainTextResultTest.java index 1c932c6fd..5ce103c65 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/PlainTextResultTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/PlainTextResultTest.java @@ -21,18 +21,17 @@ import java.io.InputStream; import java.io.PrintWriter; import java.io.StringWriter; -import junit.framework.TestCase; - +import com.opensymphony.util.ClassLoaderUtil; import org.apache.struts2.StrutsStatics; import org.apache.struts2.views.jsp.AbstractUITagTest; import org.apache.struts2.views.jsp.StrutsMockHttpServletResponse; import org.apache.struts2.views.jsp.StrutsMockServletContext; - -import com.opensymphony.util.ClassLoaderUtil; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.mock.MockActionInvocation; import com.opensymphony.xwork2.util.OgnlValueStack; +import junit.framework.TestCase; + /** * Test case for PlainTextResult. * diff --git a/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatchedTestAssertInterceptor.java b/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatchedTestAssertInterceptor.java index e5aa35171..35882b9a0 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatchedTestAssertInterceptor.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatchedTestAssertInterceptor.java @@ -17,12 +17,10 @@ */ package org.apache.struts2.dispatcher; -import junit.framework.Assert; - import org.apache.struts2.TestAction; - import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; +import junit.framework.Assert; /** diff --git a/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatcherResultTest.java b/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatcherResultTest.java index 8e4f59bae..2ae132213 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatcherResultTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/ServletDispatcherResultTest.java @@ -17,19 +17,17 @@ */ package org.apache.struts2.dispatcher; -import javax.servlet.RequestDispatcher; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import ognl.Ognl; - +import com.mockobjects.dynamic.C; +import com.mockobjects.dynamic.Mock; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsStatics; import org.apache.struts2.StrutsTestCase; - -import com.mockobjects.dynamic.C; -import com.mockobjects.dynamic.Mock; import com.opensymphony.xwork2.ActionContext; +import ognl.Ognl; + +import javax.servlet.RequestDispatcher; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** diff --git a/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java b/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java index 5c0376f9a..58a991b38 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java @@ -17,12 +17,8 @@ */ package org.apache.struts2.dispatcher; -import java.util.HashMap; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import ognl.Ognl; +import com.mockobjects.dynamic.C; +import com.mockobjects.dynamic.Mock; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsStatics; @@ -30,14 +26,17 @@ import org.apache.struts2.StrutsTestCase; import org.apache.struts2.config.StrutsXMLConfigurationProvider; import org.springframework.mock.web.MockServletContext; -import com.mockobjects.dynamic.C; -import com.mockobjects.dynamic.Mock; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.config.ConfigurationManager; import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.mock.MockActionInvocation; import com.opensymphony.xwork2.util.OgnlValueStack; +import ognl.Ognl; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; /** diff --git a/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java b/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java index d8bc04376..a8ce8fc26 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/SessionMapTest.java @@ -17,18 +17,16 @@ */ package org.apache.struts2.dispatcher; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - -import junit.framework.TestCase; - import com.mockobjects.constraint.Constraint; import com.mockobjects.constraint.IsAnything; import com.mockobjects.constraint.IsEqual; import com.mockobjects.dynamic.Mock; +import junit.framework.TestCase; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; /** diff --git a/core/src/test/java/org/apache/struts2/dispatcher/StreamResultTest.java b/core/src/test/java/org/apache/struts2/dispatcher/StreamResultTest.java index e76b1854b..b71049440 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/StreamResultTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/StreamResultTest.java @@ -17,23 +17,21 @@ */ package org.apache.struts2.dispatcher; +import com.opensymphony.util.ClassLoaderUtil; +import org.apache.struts2.ServletActionContext; +import com.opensymphony.xwork2.Action; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.mock.MockActionInvocation; +import com.opensymphony.xwork2.util.OgnlValueStack; +import junit.framework.TestCase; +import org.springframework.mock.web.MockHttpServletResponse; + import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.URI; import java.net.URL; -import junit.framework.TestCase; - -import org.apache.struts2.ServletActionContext; -import org.springframework.mock.web.MockHttpServletResponse; - -import com.opensymphony.util.ClassLoaderUtil; -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.mock.MockActionInvocation; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * Unit test for {@link StreamResult}. * @@ -76,7 +74,7 @@ public class StreamResultTest extends TestCase { result.doExecute("helloworld", mai); - assertEquals(0, result.getContentLength()); + assertEquals(null, result.getContentLength()); assertEquals("text/plain", result.getContentType()); assertEquals("streamForImage", result.getInputName()); assertEquals(1024, result.getBufferSize()); // 1024 is default @@ -92,13 +90,13 @@ public class StreamResultTest extends TestCase { result.setParse(false); result.setInputName("streamForImage"); result.setBufferSize(128); - result.setContentLength(contentLength); + result.setContentLength(String.valueOf(contentLength)); result.setContentDisposition("filename=\"logo.png\""); result.setContentType("image/jpeg"); result.doExecute("helloworld", mai); - assertEquals(contentLength, result.getContentLength()); + assertEquals(String.valueOf(contentLength), result.getContentLength()); assertEquals("image/jpeg", result.getContentType()); assertEquals("streamForImage", result.getInputName()); assertEquals(128, result.getBufferSize()); @@ -109,19 +107,48 @@ public class StreamResultTest extends TestCase { assertEquals("filename=\"logo.png\"", response.getHeader("Content-disposition")); } - public void testStreamResultParse() throws Exception { - // TODO: There is a bug in StreamResult with parse = true -/* + public void testStreamResultParse1() throws Exception { + /////////////////// result.setParse(true); - result.setInputName("${top.streamForImage}"); + // ${...} conditionalParse of Result, returns String, + // which gets evaluated to the stack, that's how it works. + // We use ${streamForImageAsString} that returns "streamForImage" + // which is a property that returns an InputStream object. + result.setInputName("${streamForImageAsString}"); result.setBufferSize(128); - result.setContentLength(contentLength); + result.setContentLength(String.valueOf(contentLength)); result.setContentDisposition("filename=\"logo.png\""); result.setContentType("image/jpeg"); result.doExecute("helloworld", mai); - assertEquals(contentLength, result.getContentLength()); + assertEquals(String.valueOf(contentLength), result.getContentLength()); + assertEquals("image/jpeg", result.getContentType()); + assertEquals("${streamForImageAsString}", result.getInputName()); + assertEquals(128, result.getBufferSize()); + assertEquals("filename=\"logo.png\"", result.getContentDisposition()); + + assertEquals("image/jpeg", response.getContentType()); + assertEquals(contentLength, response.getContentLength()); + assertEquals("filename=\"logo.png\"", response.getHeader("Content-disposition")); + } + + public void testStreamResultParse2() throws Exception { + /////////////////// + result.setParse(true); + // This time we dun use ${...}, so streamForImage will + // be evaluated to the stack, which should reaturn an + // InputStream object, cause there's such a property in + // the action object itself. + result.setInputName("streamForImage"); + result.setBufferSize(128); + result.setContentLength(String.valueOf(contentLength)); + result.setContentDisposition("filename=\"logo.png\""); + result.setContentType("image/jpeg"); + + result.doExecute("helloworld", mai); + + assertEquals(String.valueOf(contentLength), result.getContentLength()); assertEquals("image/jpeg", result.getContentType()); assertEquals("streamForImage", result.getInputName()); assertEquals(128, result.getBufferSize()); @@ -130,7 +157,6 @@ public class StreamResultTest extends TestCase { assertEquals("image/jpeg", response.getContentType()); assertEquals(contentLength, response.getContentLength()); assertEquals("filename=\"logo.png\"", response.getHeader("Content-disposition")); -*/ } protected void setUp() throws Exception { @@ -151,6 +177,8 @@ public class StreamResultTest extends TestCase { ActionContext.getContext().put(ServletActionContext.HTTP_RESPONSE, response); } + + protected void tearDown() { response = null; @@ -166,7 +194,8 @@ public class StreamResultTest extends TestCase { // just use src/test/log4j.properties as test file URL url = ClassLoaderUtil.getResource("log4j.properties", StreamResultTest.class); File file = new File(new URI(url.toString())); - return new FileInputStream(file); + FileInputStream fis = new FileInputStream(file); + return fis; } public String execute() throws Exception { @@ -178,6 +207,10 @@ public class StreamResultTest extends TestCase { File file = new File(new URI(url.toString())); return file.length(); } + + public String getStreamForImageAsString() { + return "streamForImage"; + } } } diff --git a/core/src/test/java/org/apache/struts2/dispatcher/StrutsResultSupportTest.java b/core/src/test/java/org/apache/struts2/dispatcher/StrutsResultSupportTest.java index e3fc3a16b..45f833e4f 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/StrutsResultSupportTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/StrutsResultSupportTest.java @@ -18,6 +18,23 @@ package org.apache.struts2.dispatcher; import org.apache.struts2.StrutsTestCase; +/* + * $Id: StrutsResultSupport.java 394468 2006-04-16 12:16:03Z tmjee $ + * + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import org.easymock.EasyMock; import com.opensymphony.xwork2.ActionInvocation; diff --git a/core/src/test/java/org/apache/struts2/dispatcher/VelocityResultTest.java b/core/src/test/java/org/apache/struts2/dispatcher/VelocityResultTest.java index 2266fe8dc..9b5a5399f 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/VelocityResultTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/VelocityResultTest.java @@ -17,18 +17,16 @@ */ package org.apache.struts2.dispatcher; -import junit.framework.TestCase; - -import org.apache.velocity.Template; -import org.apache.velocity.app.VelocityEngine; -import org.apache.velocity.exception.ParseErrorException; -import org.apache.velocity.exception.ResourceNotFoundException; - import com.mockobjects.dynamic.Mock; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.util.OgnlValueStack; +import junit.framework.TestCase; +import org.apache.velocity.Template; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.exception.ParseErrorException; +import org.apache.velocity.exception.ResourceNotFoundException; /** diff --git a/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java b/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java index 760f328b7..306c81ad9 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java @@ -17,19 +17,19 @@ */ package org.apache.struts2.dispatcher.mapper; -import java.util.HashMap; -import java.util.Map; +import com.mockobjects.servlet.MockHttpServletRequest; +import com.opensymphony.xwork2.Result; +import com.opensymphony.xwork2.config.Configuration; +import com.opensymphony.xwork2.config.entities.PackageConfig; +import com.opensymphony.xwork2.config.impl.DefaultConfiguration; import org.apache.struts2.StrutsConstants; import org.apache.struts2.StrutsTestCase; import org.apache.struts2.dispatcher.ServletRedirectResult; import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest; -import com.mockobjects.servlet.MockHttpServletRequest; -import com.opensymphony.xwork2.Result; -import com.opensymphony.xwork2.config.Configuration; -import com.opensymphony.xwork2.config.entities.PackageConfig; -import com.opensymphony.xwork2.config.impl.DefaultConfiguration; +import java.util.HashMap; +import java.util.Map; /** * DefaultActionMapper test case. @@ -79,7 +79,8 @@ public class DefaultActionMapperTest extends StrutsTestCase { ActionMapping mapping = mapper.getMapping(req, config); assertEquals("/my/namespace", mapping.getNamespace()); - assertEquals("actionName!add", mapping.getName()); + assertEquals("actionName", mapping.getName()); + assertEquals("add", mapping.getMethod()); } public void testGetMappingWithSlashedName() throws Exception { @@ -266,7 +267,7 @@ public class DefaultActionMapperTest extends StrutsTestCase { actionMapping.setNamespace("/myNamespace"); String uri = mapper.getUriFromActionMapping(actionMapping); - assertEquals("/myNamespace/myActionName.action", uri); + assertEquals("/myNamespace/myActionName!myMethod.action", uri); } public void testGetUriFromActionMapper2() throws Exception { @@ -277,7 +278,7 @@ public class DefaultActionMapperTest extends StrutsTestCase { actionMapping.setNamespace("/"); String uri = mapper.getUriFromActionMapping(actionMapping); - assertEquals("/myActionName.action", uri); + assertEquals("/myActionName!myMethod.action", uri); } public void testGetUriFromActionMapper3() throws Exception { @@ -288,7 +289,7 @@ public class DefaultActionMapperTest extends StrutsTestCase { actionMapping.setNamespace(""); String uri = mapper.getUriFromActionMapping(actionMapping); - assertEquals("/myActionName.action", uri); + assertEquals("/myActionName!myMethod.action", uri); } @@ -321,7 +322,7 @@ public class DefaultActionMapperTest extends StrutsTestCase { actionMapping.setNamespace("/myNamespace"); String uri = mapper.getUriFromActionMapping(actionMapping); - assertEquals("/myNamespace/myActionName.action?test=bla", uri); + assertEquals("/myNamespace/myActionName!myMethod.action?test=bla", uri); } public void testGetUriFromActionMapper7() throws Exception { @@ -332,7 +333,7 @@ public class DefaultActionMapperTest extends StrutsTestCase { actionMapping.setNamespace("/"); String uri = mapper.getUriFromActionMapping(actionMapping); - assertEquals("/myActionName.action?test=bla", uri); + assertEquals("/myActionName!myMethod.action?test=bla", uri); } public void testGetUriFromActionMapper8() throws Exception { @@ -343,7 +344,7 @@ public class DefaultActionMapperTest extends StrutsTestCase { actionMapping.setNamespace(""); String uri = mapper.getUriFromActionMapping(actionMapping); - assertEquals("/myActionName.action?test=bla", uri); + assertEquals("/myActionName!myMethod.action?test=bla", uri); } @@ -374,24 +375,17 @@ public class DefaultActionMapperTest extends StrutsTestCase { actionMapping.setNamespace("/"); String uri = mapper.getUriFromActionMapping(actionMapping); - assertEquals("/myActionName.action.action", uri); + assertEquals("/myActionName.action", uri); } public void testGetUriFromActionMapper12() throws Exception { - String old = org.apache.struts2.config.Settings.get(StrutsConstants.STRUTS_COMPATIBILITY_MODE); - org.apache.struts2.config.Settings.set(StrutsConstants.STRUTS_COMPATIBILITY_MODE, "true"); - try { - DefaultActionMapper mapper = new DefaultActionMapper(); - ActionMapping actionMapping = new ActionMapping(); - actionMapping.setName("myActionName.action"); - actionMapping.setNamespace("/"); - String uri = mapper.getUriFromActionMapping(actionMapping); + DefaultActionMapper mapper = new DefaultActionMapper(); + ActionMapping actionMapping = new ActionMapping(); + actionMapping.setName("myActionName.action"); + actionMapping.setNamespace("/"); + String uri = mapper.getUriFromActionMapping(actionMapping); - assertEquals("/myActionName.action", uri); - } - finally { - org.apache.struts2.config.Settings.set(StrutsConstants.STRUTS_COMPATIBILITY_MODE, old); - } + assertEquals("/myActionName.action", uri); } } diff --git a/core/src/test/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapperTest.java b/core/src/test/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapperTest.java index 6e95c2d82..9e385a02e 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapperTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapperTest.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.dispatcher.mapper; +import junit.framework.TestCase; + +import java.util.Map; import java.util.Collections; import java.util.HashMap; -import java.util.Map; - -import junit.framework.TestCase; import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest; diff --git a/core/src/test/java/org/apache/struts2/impl/MessagesTest.java b/core/src/test/java/org/apache/struts2/impl/MessagesTest.java index d92b5dd74..5d9439f45 100644 --- a/core/src/test/java/org/apache/struts2/impl/MessagesTest.java +++ b/core/src/test/java/org/apache/struts2/impl/MessagesTest.java @@ -3,7 +3,6 @@ package org.apache.struts2.impl; import junit.framework.TestCase; - import org.apache.struts2.Messages; public class MessagesTest extends TestCase { diff --git a/core/src/test/java/org/apache/struts2/impl/RequestContextTest.java b/core/src/test/java/org/apache/struts2/impl/RequestContextTest.java index ec8cc9a0e..9351255e5 100644 --- a/core/src/test/java/org/apache/struts2/impl/RequestContextTest.java +++ b/core/src/test/java/org/apache/struts2/impl/RequestContextTest.java @@ -2,22 +2,17 @@ package org.apache.struts2.impl; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.concurrent.Callable; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.ActionContext; +import junit.framework.TestCase; +import static org.easymock.EasyMock.*; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; - -import junit.framework.TestCase; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; +import java.util.Arrays; +import java.util.List; +import java.util.HashMap; +import java.util.concurrent.Callable; public class RequestContextTest extends TestCase { diff --git a/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java index d8602d538..1fc59b41b 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java @@ -19,12 +19,12 @@ package org.apache.struts2.interceptor; import javax.servlet.http.HttpServletRequest; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsTestCase; import org.jmock.Mock; import org.jmock.core.constraint.IsEqual; import org.jmock.core.matcher.InvokeOnceMatcher; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsTestCase; import com.opensymphony.xwork2.mock.MockActionInvocation; /** diff --git a/core/src/test/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptorTest.java index 19d71de77..8ad448536 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptorTest.java @@ -17,22 +17,7 @@ */ package org.apache.struts2.interceptor; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpSession; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsTestCase; -import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest; -import org.apache.struts2.views.jsp.StrutsMockHttpSession; - -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.ActionProxyFactory; +import com.opensymphony.xwork2.*; import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.config.ConfigurationException; import com.opensymphony.xwork2.config.ConfigurationProvider; @@ -42,6 +27,16 @@ import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.interceptor.ParametersInterceptor; import com.opensymphony.xwork2.mock.MockResult; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsTestCase; +import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest; +import org.apache.struts2.views.jsp.StrutsMockHttpSession; + +import javax.servlet.http.HttpSession; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * Test case for ExecuteAndWaitInterceptor. diff --git a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java index afc945a15..8290a3cd7 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java @@ -17,6 +17,15 @@ */ package org.apache.struts2.interceptor; +import com.opensymphony.util.ClassLoaderUtil; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsTestCase; +import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; +import com.opensymphony.xwork2.*; +import com.opensymphony.xwork2.mock.MockActionInvocation; +import org.springframework.mock.web.MockHttpServletRequest; + +import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.net.URI; @@ -26,19 +35,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsTestCase; -import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; -import org.springframework.mock.web.MockHttpServletRequest; - -import com.opensymphony.util.ClassLoaderUtil; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionSupport; -import com.opensymphony.xwork2.ValidationAwareSupport; -import com.opensymphony.xwork2.mock.MockActionInvocation; - /** * Test case for FileUploadInterceptor. diff --git a/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java index 2127aaad6..0a294cb56 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java @@ -17,24 +17,22 @@ */ package org.apache.struts2.interceptor; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.struts2.StrutsStatics; import org.apache.struts2.StrutsTestCase; import org.apache.struts2.util.ServletContextAware; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.Action; +import com.opensymphony.xwork2.mock.MockActionInvocation; import org.easymock.MockControl; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockServletContext; -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.mock.MockActionInvocation; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; /** * Unit test for {@link ServletConfigInterceptor}. diff --git a/core/src/test/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptorTest.java index 41036e1f9..2ce91dea8 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptorTest.java @@ -17,11 +17,6 @@ */ package org.apache.struts2.interceptor; -import java.util.HashMap; -import java.util.Map; - -import org.apache.struts2.StrutsTestCase; - import com.mockobjects.dynamic.C; import com.mockobjects.dynamic.Mock; import com.opensymphony.xwork2.Action; @@ -29,6 +24,10 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.struts2.StrutsTestCase; + +import java.util.HashMap; +import java.util.Map; /** diff --git a/core/src/test/java/org/apache/struts2/interceptor/TokenInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/TokenInterceptorTest.java index 7d28b4a9c..665a72382 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/TokenInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/TokenInterceptorTest.java @@ -17,12 +17,8 @@ */ package org.apache.struts2.interceptor; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - +import com.opensymphony.xwork2.*; +import com.opensymphony.xwork2.util.OgnlValueStack; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsTestCase; import org.apache.struts2.TestConfigurationProvider; @@ -30,11 +26,10 @@ import org.apache.struts2.util.TokenHelper; import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest; import org.apache.struts2.views.jsp.StrutsMockHttpSession; -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.ActionProxyFactory; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; /** diff --git a/core/src/test/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptorTest.java index b4e3fa83b..d3c1ff493 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptorTest.java @@ -17,10 +17,9 @@ */ package org.apache.struts2.interceptor; -import org.apache.struts2.TestConfigurationProvider; - -import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionProxy; +import com.opensymphony.xwork2.Action; +import org.apache.struts2.TestConfigurationProvider; /** * Unit test for {@link TokenSessionStoreInterceptor}. diff --git a/core/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java b/core/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java index bb15f6849..02f2cbf72 100644 --- a/core/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java +++ b/core/src/test/java/org/apache/struts2/portlet/context/PortletActionContextTest.java @@ -28,10 +28,10 @@ import javax.portlet.RenderResponse; import junit.textui.TestRunner; -import org.apache.struts2.portlet.PortletActionConstants; import org.jmock.Mock; import org.jmock.MockObjectTestCase; +import org.apache.struts2.portlet.PortletActionConstants; import com.opensymphony.xwork2.ActionContext; /** diff --git a/core/src/test/java/org/apache/struts2/portlet/context/PreparatorServletTest.java b/core/src/test/java/org/apache/struts2/portlet/context/PreparatorServletTest.java index eb2af32d9..bbfa3e44a 100644 --- a/core/src/test/java/org/apache/struts2/portlet/context/PreparatorServletTest.java +++ b/core/src/test/java/org/apache/struts2/portlet/context/PreparatorServletTest.java @@ -22,9 +22,12 @@ import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.easymock.MockControl; + import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsTestCase; -import org.easymock.MockControl; + +import junit.framework.TestCase; /** * diff --git a/core/src/test/java/org/apache/struts2/portlet/context/ServletContextHolderListenerTest.java b/core/src/test/java/org/apache/struts2/portlet/context/ServletContextHolderListenerTest.java index 2a86fdc01..e0be1903c 100644 --- a/core/src/test/java/org/apache/struts2/portlet/context/ServletContextHolderListenerTest.java +++ b/core/src/test/java/org/apache/struts2/portlet/context/ServletContextHolderListenerTest.java @@ -20,10 +20,10 @@ package org.apache.struts2.portlet.context; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; -import junit.framework.TestCase; - import org.easymock.MockControl; +import junit.framework.TestCase; + /** */ public class ServletContextHolderListenerTest extends TestCase { diff --git a/core/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java b/core/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java index 1799551b3..003f70e47 100644 --- a/core/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java +++ b/core/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java @@ -38,17 +38,19 @@ import javax.servlet.ServletContextEvent; import junit.textui.TestRunner; -import org.apache.struts2.portlet.PortletActionConstants; -import org.apache.struts2.portlet.context.ServletContextHolderListener; import org.jmock.Mock; import org.jmock.cglib.MockObjectTestCase; import org.jmock.core.Constraint; +import org.apache.struts2.dispatcher.Dispatcher; +import org.apache.struts2.portlet.PortletActionConstants; +import org.apache.struts2.portlet.context.ServletContextHolderListener; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.ActionProxyFactory; import com.opensymphony.xwork2.config.Configuration; +import com.opensymphony.xwork2.config.ConfigurationManager; import com.opensymphony.xwork2.util.OgnlValueStack; /** @@ -112,6 +114,7 @@ public class Jsr168DispatcherTest extends MockObjectTestCase implements PortletA servletContext.stubs().method(ANYTHING); ServletContextEvent event = new ServletContextEvent((ServletContext)servletContext.proxy()); new ServletContextHolderListener().contextInitialized(event); + String actionName = "testAction"; PortletMode mode = PortletMode.VIEW; Map requestParams = new HashMap(); @@ -149,6 +152,7 @@ public class Jsr168DispatcherTest extends MockObjectTestCase implements PortletA public void testProcessAction_ok() { final Mock mockResponse = mock(ActionResponse.class); + String actionName = "testAction"; PortletMode mode = PortletMode.VIEW; Map initParams = new HashMap(); initParams.put("viewNamespace", "/view"); @@ -255,6 +259,7 @@ public class Jsr168DispatcherTest extends MockObjectTestCase implements PortletA public void testModeChangeUsingPortletWidgets() { final Mock mockResponse = mock(RenderResponse.class); mockResponse.stubs().method(ANYTHING); + String actionName = "testAction"; PortletMode mode = PortletMode.EDIT; Map requestParams = new HashMap(); diff --git a/core/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java b/core/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java index fb6ca2e96..495e7e351 100644 --- a/core/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java +++ b/core/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java @@ -31,11 +31,11 @@ import javax.portlet.RenderResponse; import junit.textui.TestRunner; -import org.apache.struts2.portlet.PortletActionConstants; import org.jmock.Mock; import org.jmock.cglib.MockObjectTestCase; import org.jmock.core.Constraint; +import org.apache.struts2.portlet.PortletActionConstants; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; @@ -208,6 +208,7 @@ public class PortletResultTest extends MockObjectTestCase { PortletRequestDispatcher rd = (PortletRequestDispatcher)mockRd.proxy(); PortletConfig cfg = (PortletConfig)mockConfig.proxy(); PortletContext ctx = (PortletContext)mockCtx.proxy(); + ActionInvocation inv = (ActionInvocation)mockInvocation.proxy(); Constraint[] params = new Constraint[]{same(req), same(res)}; mockRd.expects(once()).method("include").with(params); diff --git a/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java b/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java index 00f6701ca..53403f84f 100644 --- a/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java +++ b/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java @@ -28,9 +28,9 @@ import javax.portlet.WindowState; import junit.framework.TestCase; -import org.apache.struts2.portlet.context.PortletActionContext; import org.easymock.MockControl; +import org.apache.struts2.portlet.context.PortletActionContext; import com.opensymphony.xwork2.ActionContext; /** diff --git a/core/src/test/java/org/apache/struts2/portlet/util/StrutsUtilTest.java b/core/src/test/java/org/apache/struts2/portlet/util/StrutsUtilTest.java index 654ae2e83..693bd488b 100644 --- a/core/src/test/java/org/apache/struts2/portlet/util/StrutsUtilTest.java +++ b/core/src/test/java/org/apache/struts2/portlet/util/StrutsUtilTest.java @@ -24,16 +24,18 @@ import javax.servlet.RequestDispatcher; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import org.apache.struts2.StrutsTestCase; -import org.apache.struts2.TestAction; -import org.apache.struts2.util.ListEntry; -import org.apache.struts2.util.StrutsUtil; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockRequestDispatcher; +import org.apache.struts2.TestAction; +import org.apache.struts2.StrutsTestCase; +import org.apache.struts2.util.ListEntry; +import org.apache.struts2.util.StrutsUtil; import com.opensymphony.xwork2.util.OgnlValueStack; +import junit.framework.TestCase; + /** * Test case for StrutsUtil. * diff --git a/core/src/test/java/org/apache/struts2/sitegraph/SiteGraphTest.java b/core/src/test/java/org/apache/struts2/sitegraph/SiteGraphTest.java index 219fa9c4b..b7097a3f3 100644 --- a/core/src/test/java/org/apache/struts2/sitegraph/SiteGraphTest.java +++ b/core/src/test/java/org/apache/struts2/sitegraph/SiteGraphTest.java @@ -17,15 +17,16 @@ */ package org.apache.struts2.sitegraph; -import java.io.File; -import java.io.InputStream; -import java.io.StringWriter; -import java.net.URL; +import com.opensymphony.util.ClassLoaderUtil; +import com.opensymphony.xwork2.config.ConfigurationManager; import org.apache.struts2.StrutsTestCase; import org.apache.struts2.dispatcher.Dispatcher; -import com.opensymphony.util.ClassLoaderUtil; +import java.io.File; +import java.io.InputStream; +import java.io.StringWriter; +import java.net.URL; /** */ diff --git a/core/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java b/core/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java index 63d1c5c39..1e0c1ac7e 100644 --- a/core/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java +++ b/core/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java @@ -17,17 +17,18 @@ */ package org.apache.struts2.spring; -import javax.servlet.ServletContext; - import org.apache.struts2.StrutsConstants; import org.apache.struts2.StrutsTestCase; import org.apache.struts2.config.Settings; +import junit.framework.TestCase; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.mock.web.MockServletContext; import org.springframework.web.context.ConfigurableWebApplicationContext; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.XmlWebApplicationContext; +import javax.servlet.ServletContext; + /** * Unit test for {@link StrutsSpringObjectFactory}. * diff --git a/core/src/test/java/org/apache/struts2/util/InvocationSessionStoreTest.java b/core/src/test/java/org/apache/struts2/util/InvocationSessionStoreTest.java index c5b3a87b0..313c58c1c 100644 --- a/core/src/test/java/org/apache/struts2/util/InvocationSessionStoreTest.java +++ b/core/src/test/java/org/apache/struts2/util/InvocationSessionStoreTest.java @@ -17,17 +17,16 @@ */ package org.apache.struts2.util; -import java.util.HashMap; -import java.util.Map; - -import org.apache.struts2.StrutsTestCase; - import com.mockobjects.dynamic.Mock; +import org.apache.struts2.StrutsTestCase; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.util.OgnlValueStack; +import java.util.HashMap; +import java.util.Map; + /** * InvocationSessionStoreTest diff --git a/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java b/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java index be318231a..5eb5ee3f6 100644 --- a/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java +++ b/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java @@ -47,6 +47,7 @@ public class TokenHelperTest extends TestCase { public void testValidToken() { String tokenName = "validTokenTest"; + Map params = new HashMap(); String token = TokenHelper.setToken(tokenName); assertEquals(token, session.get(tokenName)); diff --git a/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java b/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java index 6c87ea20b..4fa406e0c 100644 --- a/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java +++ b/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java @@ -17,15 +17,9 @@ */ package org.apache.struts2.views; -import junit.framework.TestCase; - -import org.apache.struts2.components.template.FreemarkerTemplateEngine; -import org.apache.struts2.components.template.JspTemplateEngine; -import org.apache.struts2.components.template.Template; -import org.apache.struts2.components.template.TemplateEngine; -import org.apache.struts2.components.template.TemplateEngineManager; -import org.apache.struts2.components.template.VelocityTemplateEngine; +import org.apache.struts2.components.template.*; import org.apache.struts2.config.Settings; +import junit.framework.TestCase; /** * TemplateEngineManagerTest diff --git a/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerTest.java b/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerTest.java index db1d39e22..2fe9b85c2 100644 --- a/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerTest.java +++ b/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerTest.java @@ -17,18 +17,15 @@ */ package org.apache.struts2.views.freemarker; -import java.util.List; - -import junit.framework.TestCase; - import org.apache.struts2.util.ListEntry; import org.apache.struts2.util.StrutsUtil; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.OgnlValueStack; - import freemarker.ext.beans.CollectionModel; import freemarker.template.ObjectWrapper; +import junit.framework.TestCase; + +import java.util.List; /** diff --git a/core/src/test/java/org/apache/struts2/views/freemarker/TestAction.java b/core/src/test/java/org/apache/struts2/views/freemarker/TestAction.java index e3ee49333..9ff1e0f13 100644 --- a/core/src/test/java/org/apache/struts2/views/freemarker/TestAction.java +++ b/core/src/test/java/org/apache/struts2/views/freemarker/TestAction.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.views.freemarker; +import com.opensymphony.xwork2.ActionSupport; + import java.util.ArrayList; import java.util.List; -import com.opensymphony.xwork2.ActionSupport; - /** */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java index fa50283ec..e9d9dd568 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java @@ -17,26 +17,24 @@ */ package org.apache.struts2.views.jsp; -import java.io.File; -import java.io.StringWriter; -import java.util.Map; - -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspWriter; - import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsTestCase; import org.apache.struts2.TestAction; +import org.apache.struts2.StrutsTestCase; import org.apache.struts2.config.Settings; import org.apache.struts2.dispatcher.ApplicationMap; import org.apache.struts2.dispatcher.Dispatcher; import org.apache.struts2.dispatcher.RequestMap; import org.apache.struts2.dispatcher.SessionMap; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.jsp.JspWriter; +import java.io.File; +import java.io.StringWriter; +import java.util.Map; + /** * Base class to extend for unit testing UI Tags. diff --git a/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java index 77bda4a5e..d8464a6f6 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java @@ -17,26 +17,19 @@ */ package org.apache.struts2.views.jsp; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.views.jsp.ui.AbstractUITag; +import com.opensymphony.xwork2.ActionContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.net.URL; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.views.jsp.ui.AbstractUITag; - -import com.opensymphony.xwork2.ActionContext; +import java.util.*; /** diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ActionTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ActionTagTest.java index 3cff7d72f..13a3edd3b 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ActionTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ActionTagTest.java @@ -17,21 +17,14 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.PageContext; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsException; -import org.apache.struts2.TestAction; -import org.apache.struts2.TestActionTagResult; -import org.apache.struts2.TestConfigurationProvider; +import com.opensymphony.xwork2.*; +import com.opensymphony.xwork2.Action; +import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.struts2.*; import org.apache.struts2.components.ActionComponent; -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.PageContext; /** @@ -200,6 +193,7 @@ public class ActionTagTest extends AbstractTagTest { } } + // FIXME: Logging the error seems to cause the standard Maven build to fail public void testUnknownNameDefined() throws Exception { ActionTag tag = new ActionTag(); tag.setPageContext(pageContext); @@ -209,7 +203,7 @@ public class ActionTagTest extends AbstractTagTest { tag.doStartTag(); tag.doEndTag(); - // will just log it to ERROR but we run th code to test that it works somehow + // will just log it to ERROR but we run the code to test that it works somehow } public void testActionMethodWithExecuteResult() throws Exception { diff --git a/core/src/test/java/org/apache/struts2/views/jsp/AnchorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/AnchorTagTest.java index d9a5bae00..35a19bf70 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/AnchorTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/AnchorTagTest.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.views.jsp; -import java.io.StringWriter; +import org.apache.struts2.views.jsp.ui.AnchorTag; +import org.apache.struts2.views.jsp.ui.StrutsBodyContent; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; - -import org.apache.struts2.views.jsp.ui.AnchorTag; -import org.apache.struts2.views.jsp.ui.StrutsBodyContent; +import java.io.StringWriter; /** diff --git a/core/src/test/java/org/apache/struts2/views/jsp/AppendIteratorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/AppendIteratorTagTest.java index 3a25869e5..ef3173eeb 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/AppendIteratorTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/AppendIteratorTagTest.java @@ -22,7 +22,6 @@ import java.util.Iterator; import java.util.List; import org.apache.struts2.views.jsp.iterator.AppendIteratorTag; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ElseIfTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ElseIfTagTest.java index fac48c11d..196d96de7 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ElseIfTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ElseIfTagTest.java @@ -19,15 +19,14 @@ package org.apache.struts2.views.jsp; import javax.servlet.jsp.tagext.TagSupport; -import junit.framework.TestCase; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.components.If; - import com.mockobjects.servlet.MockJspWriter; import com.mockobjects.servlet.MockPageContext; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.components.If; import com.opensymphony.xwork2.util.OgnlValueStack; +import junit.framework.TestCase; + /** * */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ElseTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ElseTagTest.java index 44da774f6..50f5b2419 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ElseTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ElseTagTest.java @@ -17,16 +17,16 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.TagSupport; - +import com.mockobjects.servlet.MockJspWriter; +import com.mockobjects.servlet.MockPageContext; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsTestCase; import org.apache.struts2.components.If; - -import com.mockobjects.servlet.MockJspWriter; -import com.mockobjects.servlet.MockPageContext; import com.opensymphony.xwork2.util.OgnlValueStack; +import junit.framework.TestCase; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.tagext.TagSupport; /** @@ -93,7 +93,7 @@ public class ElseTagTest extends StrutsTestCase { // create the mock http servlet request StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest(); - // NOTE: in WW Tag library, TagUtil gets stack from request, which will be set + // NOTE: in Struts Tag library, TagUtil gets stack from request, which will be set // when request going through the FilterDispatcher --> DispatcherUtil etc. route request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack); diff --git a/core/src/test/java/org/apache/struts2/views/jsp/IfTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/IfTagTest.java index fc278d19b..33fd915de 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/IfTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/IfTagTest.java @@ -17,17 +17,15 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.TagSupport; - -import junit.framework.TestCase; - -import org.apache.struts2.ServletActionContext; - import com.mockobjects.servlet.MockJspWriter; import com.mockobjects.servlet.MockPageContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.struts2.ServletActionContext; +import junit.framework.TestCase; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.tagext.TagSupport; /** @@ -258,6 +256,60 @@ public class IfTagTest extends TestCase { } + public void testNestedIfElse1() throws Exception { + IfTag ifTag = new IfTag(); + ifTag.setPageContext(pageContext); + ifTag.setTest("true"); + + IfTag nestedIfTag = new IfTag(); + nestedIfTag.setPageContext(pageContext); + nestedIfTag.setTest("true"); + + ElseTag elseTag = new ElseTag(); + elseTag.setPageContext(pageContext); + + int r1 = ifTag.doStartTag(); + int r2 = nestedIfTag.doStartTag(); + int r3 = nestedIfTag.doEndTag(); + int r4 = ifTag.doEndTag(); + int r5 = elseTag.doStartTag(); + int r6 = elseTag.doEndTag(); + + assertEquals(TagSupport.EVAL_BODY_INCLUDE, r1); + assertEquals(TagSupport.EVAL_BODY_INCLUDE, r2); + assertEquals(TagSupport.EVAL_PAGE, r3); + assertEquals(TagSupport.EVAL_PAGE, r4); + assertEquals(TagSupport.SKIP_BODY, r5); + assertEquals(TagSupport.EVAL_PAGE, r6); + } + + public void testNestedIfElse2() throws Exception { + IfTag ifTag = new IfTag(); + ifTag.setPageContext(pageContext); + ifTag.setTest("true"); + + IfTag nestedIfTag = new IfTag(); + nestedIfTag.setPageContext(pageContext); + nestedIfTag.setTest("false"); + + ElseTag elseTag = new ElseTag(); + elseTag.setPageContext(pageContext); + + int r1 = ifTag.doStartTag(); + int r2 = nestedIfTag.doStartTag(); + int r3 = nestedIfTag.doEndTag(); + int r4 = ifTag.doEndTag(); + int r5 = elseTag.doStartTag(); + int r6 = elseTag.doEndTag(); + + assertEquals(TagSupport.EVAL_BODY_INCLUDE, r1); + assertEquals(TagSupport.SKIP_BODY, r2); + assertEquals(TagSupport.EVAL_PAGE, r3); + assertEquals(TagSupport.EVAL_PAGE, r4); + assertEquals(TagSupport.SKIP_BODY, r5); + assertEquals(TagSupport.EVAL_PAGE, r6); + } + diff --git a/core/src/test/java/org/apache/struts2/views/jsp/IncludeTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/IncludeTagTest.java index 950f42b1b..99f0dada9 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/IncludeTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/IncludeTagTest.java @@ -17,13 +17,13 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.RequestDispatcher; +import com.mockobjects.servlet.MockRequestDispatcher; import org.apache.struts2.StrutsException; import org.apache.struts2.components.Include; import org.easymock.MockControl; -import com.mockobjects.servlet.MockRequestDispatcher; +import javax.servlet.RequestDispatcher; /** * Unit test of {@link IncludeTag}. @@ -99,7 +99,7 @@ public class IncludeTagTest extends AbstractTagTest { tag = new IncludeTag(); controlRequestDispatcher = MockControl.createNiceControl(RequestDispatcher.class); - // use always matcher as we can not determine the excact objects used in mock.include(req, res) call + // use always matcher as we can not determine the excact objects used in mock.include(request, response) call controlRequestDispatcher.setDefaultMatcher(MockControl.ALWAYS_MATCHER); mockRequestDispatcher = (RequestDispatcher) controlRequestDispatcher.getMock(); diff --git a/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java index a61babbaf..c11bac7dd 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java @@ -21,7 +21,6 @@ import java.util.Iterator; import org.apache.struts2.util.IteratorGenerator.Converter; import org.apache.struts2.views.jsp.iterator.IteratorGeneratorTag; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; diff --git a/core/src/test/java/org/apache/struts2/views/jsp/IteratorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/IteratorTagTest.java index cde39494c..ae456ff63 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/IteratorTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/IteratorTagTest.java @@ -17,18 +17,17 @@ */ package org.apache.struts2.views.jsp; +import com.mockobjects.servlet.MockBodyContent; +import com.mockobjects.servlet.MockJspWriter; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.tagext.TagSupport; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.TagSupport; - -import com.mockobjects.servlet.MockBodyContent; -import com.mockobjects.servlet.MockJspWriter; - /** * Test Case for Iterator Tag diff --git a/core/src/test/java/org/apache/struts2/views/jsp/MergeIteratorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/MergeIteratorTagTest.java index c88bf5d23..9271a9689 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/MergeIteratorTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/MergeIteratorTagTest.java @@ -22,7 +22,6 @@ import java.util.Iterator; import java.util.List; import org.apache.struts2.views.jsp.iterator.MergeIteratorTag; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; diff --git a/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java index 21a82ab7f..4b21ccf9a 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java @@ -26,6 +26,7 @@ import java.util.Map; import javax.portlet.PortletMode; import javax.portlet.PortletRequest; import javax.portlet.PortletResponse; +import javax.portlet.PortletSession; import javax.portlet.PortletURL; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; @@ -36,17 +37,19 @@ import javax.servlet.jsp.PageContext; import junit.textui.TestRunner; -import org.apache.struts2.config.Settings; -import org.apache.struts2.dispatcher.Dispatcher; -import org.apache.struts2.portlet.PortletActionConstants; -import org.apache.struts2.portlet.util.PortletUrlHelper; + import org.jmock.Mock; import org.jmock.cglib.MockObjectTestCase; import org.jmock.core.Constraint; import com.mockobjects.servlet.MockJspWriter; +import org.apache.struts2.portlet.PortletActionConstants; +import org.apache.struts2.portlet.util.PortletUrlHelper; +import org.apache.struts2.views.jsp.ParamTag; +import org.apache.struts2.dispatcher.Dispatcher; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.OgnlValueStack; +import org.apache.struts2.config.Settings; /** */ @@ -183,6 +186,9 @@ public class PortletUrlTagTest extends MockObjectTestCase { public void testSetPortletMode() throws Exception { PortletMode mode = PortletMode.HELP; + WindowState state = WindowState.NORMAL; + + Mock mockSession = mock(PortletSession.class); mockHttpReq.stubs().method("getQueryString").will(returnValue("")); diff --git a/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java index 3e03f8ce3..b46108ca3 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java @@ -17,18 +17,17 @@ */ package org.apache.struts2.views.jsp; -import javax.servlet.jsp.JspException; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.StrutsTestCase; -import org.apache.struts2.config.Settings; - import com.mockobjects.servlet.MockJspWriter; import com.mockobjects.servlet.MockPageContext; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsTestCase; +import org.apache.struts2.StrutsConstants; +import org.apache.struts2.config.Settings; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.servlet.jsp.JspException; + /** * PropertyTag test case. diff --git a/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java index ef89b31fb..1870a05c9 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java @@ -17,6 +17,10 @@ */ package org.apache.struts2.views.jsp; +import org.apache.struts2.views.jsp.iterator.SortIteratorTag; +import com.opensymphony.xwork2.Action; +import com.opensymphony.xwork2.ActionSupport; + import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; @@ -24,11 +28,6 @@ import java.util.List; import javax.servlet.jsp.JspException; -import org.apache.struts2.views.jsp.iterator.SortIteratorTag; - -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionSupport; - /** * Test case to test SortIteratorTag. * diff --git a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockBodyContent.java b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockBodyContent.java index 9f94c3356..753e9a3ec 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockBodyContent.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockBodyContent.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.views.jsp; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.tagext.BodyContent; import java.io.IOException; import java.io.Reader; import java.io.Writer; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.BodyContent; - /** * StrutsMockBodyContent diff --git a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletRequest.java b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletRequest.java index 56a155c8b..2c257553b 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletRequest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletRequest.java @@ -17,19 +17,12 @@ */ package org.apache.struts2.views.jsp; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.Vector; - -import javax.servlet.RequestDispatcher; -import javax.servlet.http.HttpSession; - +import com.mockobjects.servlet.MockHttpServletRequest; import junit.framework.AssertionFailedError; -import com.mockobjects.servlet.MockHttpServletRequest; +import javax.servlet.http.HttpSession; +import javax.servlet.RequestDispatcher; +import java.util.*; /** diff --git a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java index e7d069a02..c70b4e68d 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java @@ -17,13 +17,13 @@ */ package org.apache.struts2.views.jsp; +import com.mockobjects.servlet.MockHttpServletResponse; + import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.Locale; -import com.mockobjects.servlet.MockHttpServletResponse; - /** * StrutsMockHttpServletResponse diff --git a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpSession.java b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpSession.java index 5ba045456..3c458b93c 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpSession.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpSession.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.views.jsp; +import com.mockobjects.servlet.MockHttpSession; + import java.util.Enumeration; import java.util.Hashtable; -import com.mockobjects.servlet.MockHttpSession; - /** * StrutsMockHttpSession diff --git a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockJspWriter.java b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockJspWriter.java index a8f644c9a..dc61aead4 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockJspWriter.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockJspWriter.java @@ -17,11 +17,10 @@ */ package org.apache.struts2.views.jsp; +import javax.servlet.jsp.JspWriter; import java.io.IOException; import java.io.StringWriter; -import javax.servlet.jsp.JspWriter; - /** * Unforunately, the MockJspWriter throws a NotImplementedException when any of the Writer methods are invoked and diff --git a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockPageContext.java b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockPageContext.java index cfbd71f42..373a5d959 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockPageContext.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockPageContext.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp; -import java.util.HashMap; -import java.util.Map; +import com.mockobjects.servlet.MockPageContext; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; - -import com.mockobjects.servlet.MockPageContext; +import java.util.HashMap; +import java.util.Map; /** diff --git a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java index bf07f5b49..5efc49db7 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java @@ -17,19 +17,14 @@ */ package org.apache.struts2.views.jsp; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.*; /** diff --git a/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java index 1cfd4ae94..53214e929 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java @@ -23,7 +23,6 @@ import java.util.List; import org.apache.struts2.util.SubsetIteratorFilter.Decider; import org.apache.struts2.views.jsp.iterator.SubsetIteratorTag; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; diff --git a/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java index cbf7e8696..ab64464e3 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java @@ -17,27 +17,30 @@ */ package org.apache.struts2.views.jsp; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsException; +import org.apache.struts2.TestAction; +import org.apache.struts2.components.Text; +import org.apache.struts2.views.jsp.ui.TestAction1; +import org.apache.struts2.views.jsp.ui.StrutsBodyContent; + +import com.mockobjects.servlet.MockBodyContent; +import com.mockobjects.servlet.MockJspWriter; +import com.opensymphony.xwork2.Action; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.util.OgnlValueStack; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.tagext.BodyTag; +import javax.servlet.jsp.tagext.Tag; +import javax.servlet.jsp.tagext.TagSupport; + import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.BodyTag; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsException; -import org.apache.struts2.TestAction; -import org.apache.struts2.components.Text; -import org.apache.struts2.views.jsp.ui.StrutsBodyContent; -import org.apache.struts2.views.jsp.ui.TestAction1; - -import com.mockobjects.servlet.MockJspWriter; -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.util.OgnlValueStack; - /** * TextTagTest @@ -59,7 +62,7 @@ public class TextTagTest extends AbstractTagTest { public void testDefaultMessageOk() throws Exception { // NOTE: // simulate the condition - // My Default Message + // My Default Message StrutsMockBodyContent mockBodyContent = new StrutsMockBodyContent(new MockJspWriter()); mockBodyContent.setString("Sample Of Default Message"); diff --git a/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java index 5bfbd6860..25451f496 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java @@ -18,11 +18,16 @@ package org.apache.struts2.views.jsp; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import javax.servlet.jsp.JspWriter; import org.apache.struts2.components.URL; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; + +import com.opensymphony.xwork2.util.OgnlValueStack; /** * Unit test for {@link URLTag}. @@ -31,6 +36,151 @@ import org.apache.struts2.components.URL; public class URLTagTest extends AbstractUITagTest { private URLTag tag; + + + /** + * To test priority of parameter passed in to url component though + * various way + * - current request url + * - tag's value attribute + * - tag's nested param tag + * + * id1 + * === + * - found in current request url + * - found in tag's value attribute + * - found in tag's param tag + * CONCLUSION: tag's param tag takes precedence (paramId1) + * + * id2 + * === + * - found in current request url + * - found in tag's value attribute + * CONCLUSION: tag's value attribute take precedence (tagId2) + * + * urlParam1 + * ========= + * - found in current request url + * CONCLUSION: param in current request url will be used (urlValue1) + * + * urlParam2 + * ========= + * - found in current request url + * CONCLUSION: param in current request url will be used. (urlValue2) + * + * tagId + * ===== + * - found in tag's value attribute + * CONCLUSION: param in tag's value attribute wil; be used. (tagValue) + * + * param1 + * ====== + * - found in nested param tag + * CONCLUSION: param in nested param tag will be used. (param1value) + * + * param2 + * ====== + * - found in nested param tag + * CONCLUSION: param in nested param tag will be used. (param2value) + */ + public void testParametersPriority() throws Exception { + request.setQueryString("id1=urlId1&id2=urlId2&urlParam1=urlValue1&urlParam2=urlValue2"); + + tag.setValue("testAction.action?id1=tagId1&id2=tagId2&tagId=tagValue"); + + ParamTag param1 = new ParamTag(); + param1.setPageContext(pageContext); + param1.setName("param1"); + param1.setValue("%{'param1value'}"); + + ParamTag param2 = new ParamTag(); + param2.setPageContext(pageContext); + param2.setName("param2"); + param2.setValue("%{'param2value'}"); + + ParamTag param3 = new ParamTag(); + param3.setPageContext(pageContext); + param3.setName("id1"); + param3.setValue("%{'paramId1'}"); + + + tag.doStartTag(); + param1.doStartTag(); + param1.doEndTag(); + param2.doStartTag(); + param2.doEndTag(); + param3.doStartTag(); + param3.doEndTag(); + + URL url = (URL) tag.getComponent(); + Map parameters = url.getParameters(); + + + assertNotNull(parameters); + assertEquals(parameters.size(), 7); + assertEquals(parameters.get("id1"), "paramId1"); + assertEquals(parameters.get("id2"), "tagId2"); + assertEquals(parameters.get("urlParam1"), "urlValue1"); + assertEquals(parameters.get("urlParam2"), "urlValue2"); + assertEquals(parameters.get("tagId"), "tagValue"); + assertEquals(parameters.get("param1"), "param1value"); + assertEquals(parameters.get("param2"), "param2value"); + } + + + /** + * To test priority of parameter passed in to url component though + * various way, with includeParams="NONE" + * - current request url + * - tag's value attribute + * - tag's nested param tag + * + * In this case only parameters from the tag itself is taken into account. + * Those from request will not count, only those in tag's value attribute + * and nested param tag. + * + * @throws Exception + */ + public void testParametersPriorityWithIncludeParamsAsNONE() throws Exception { + request.setQueryString("id1=urlId1&id2=urlId2&urlParam1=urlValue1&urlParam2=urlValue2"); + + tag.setValue("testAction.action?id1=tagId1&id2=tagId2&tagId=tagValue"); + tag.setIncludeParams("NONE"); + + ParamTag param1 = new ParamTag(); + param1.setPageContext(pageContext); + param1.setName("param1"); + param1.setValue("%{'param1value'}"); + + ParamTag param2 = new ParamTag(); + param2.setPageContext(pageContext); + param2.setName("param2"); + param2.setValue("%{'param2value'}"); + + ParamTag param3 = new ParamTag(); + param3.setPageContext(pageContext); + param3.setName("id1"); + param3.setValue("%{'paramId1'}"); + + + tag.doStartTag(); + param1.doStartTag(); + param1.doEndTag(); + param2.doStartTag(); + param2.doEndTag(); + param3.doStartTag(); + param3.doEndTag(); + + URL url = (URL) tag.getComponent(); + Map parameters = url.getParameters(); + + assertEquals(parameters.size(), 5); + assertEquals(parameters.get("id1"), "paramId1"); + assertEquals(parameters.get("id2"), "tagId2"); + assertEquals(parameters.get("tagId"), "tagValue"); + assertEquals(parameters.get("param1"), "param1value"); + assertEquals(parameters.get("param2"), "param2value"); + } public void testIncludeParamsDefaultToGET() throws Exception { request.setQueryString("one=oneVal&two=twoVal&three=threeVal"); diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionErrorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionErrorTagTest.java index 1c4dfd238..576a8712d 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionErrorTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionErrorTagTest.java @@ -23,7 +23,7 @@ import java.util.Collections; import java.util.List; import org.apache.struts2.views.jsp.AbstractUITagTest; - +import org.apache.struts2.views.jsp.ui.ActionErrorTag; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionMessageTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionMessageTagTest.java index 8bfe7ed93..7128dc4d5 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionMessageTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/ActionMessageTagTest.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.List; import org.apache.struts2.views.jsp.AbstractUITagTest; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxListTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxListTest.java index 8cb0b8945..a7ec8eb66 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxListTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxListTest.java @@ -17,13 +17,13 @@ */ package org.apache.struts2.views.jsp.ui; +import org.apache.struts2.TestAction; +import org.apache.struts2.views.jsp.AbstractUITagTest; + import java.util.ArrayList; import java.util.Collection; import java.util.Map; -import org.apache.struts2.TestAction; -import org.apache.struts2.views.jsp.AbstractUITagTest; - /** * Test case for CheckboxList. diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxTest.java index 6e6c5e665..e6cfd2743 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/CheckboxTest.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.Map; - import org.apache.struts2.TestAction; import org.apache.struts2.views.jsp.AbstractUITagTest; +import java.util.Map; + /** */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java index fc9372027..e01ce5f54 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java @@ -17,14 +17,14 @@ */ package org.apache.struts2.views.jsp.ui; +import org.apache.struts2.TestAction; +import org.apache.struts2.views.jsp.AbstractUITagTest; + import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import org.apache.struts2.TestAction; -import org.apache.struts2.views.jsp.AbstractUITagTest; - /** * Test case for ComboBox component. diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java index 56daea855..6361a0950 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/DatePickerTagTest.java @@ -17,12 +17,11 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.Locale; - import org.apache.struts2.views.jsp.AbstractUITagTest; - import com.opensymphony.xwork2.ActionContext; +import java.util.Locale; + /** * Unit test for {@link DatePickerTag}. * diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/DateTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/DateTagTest.java index c980de4b5..44f6bf177 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/DateTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/DateTagTest.java @@ -17,16 +17,15 @@ */ package org.apache.struts2.views.jsp.ui; +import org.apache.struts2.views.jsp.AbstractTagTest; +import org.apache.struts2.views.jsp.DateTag; +import com.opensymphony.xwork2.ActionContext; + import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; -import org.apache.struts2.views.jsp.AbstractTagTest; -import org.apache.struts2.views.jsp.DateTag; - -import com.opensymphony.xwork2.ActionContext; - /** * Unit test for {@link org.apache.struts2.components.Date}. * diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java index d2920a013..6c3205b01 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java @@ -17,13 +17,13 @@ */ package org.apache.struts2.views.jsp.ui; +import org.apache.struts2.TestAction; +import org.apache.struts2.views.jsp.AbstractUITagTest; + import java.util.ArrayList; import java.util.Collection; import java.util.List; -import org.apache.struts2.TestAction; -import org.apache.struts2.views.jsp.AbstractUITagTest; - /** * Test case for DoubleSelectTag. * diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java index 690a49011..351a226ed 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java @@ -25,7 +25,6 @@ import java.util.Map; import org.apache.struts2.views.jsp.AbstractUITagTest; import org.apache.struts2.views.jsp.ParamTag; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/FileTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/FileTest.java index 89d8431fe..a8e0175ad 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/FileTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/FileTest.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.Map; - import org.apache.struts2.TestAction; import org.apache.struts2.views.jsp.AbstractUITagTest; +import java.util.Map; + /** */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java index 25bc18814..ea34774cd 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java @@ -17,10 +17,13 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionSupport; +import com.opensymphony.xwork2.ObjectFactory; +import com.opensymphony.xwork2.config.RuntimeConfiguration; +import com.opensymphony.xwork2.config.entities.ActionConfig; +import com.opensymphony.xwork2.config.entities.InterceptorMapping; +import com.opensymphony.xwork2.validator.ValidationInterceptor; import org.apache.struts2.StrutsConstants; import org.apache.struts2.TestAction; import org.apache.struts2.TestConfigurationProvider; @@ -29,13 +32,9 @@ import org.apache.struts2.dispatcher.mapper.DefaultActionMapper; import org.apache.struts2.views.jsp.AbstractUITagTest; import org.apache.struts2.views.jsp.ActionTag; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionSupport; -import com.opensymphony.xwork2.ObjectFactory; -import com.opensymphony.xwork2.config.RuntimeConfiguration; -import com.opensymphony.xwork2.config.entities.ActionConfig; -import com.opensymphony.xwork2.config.entities.InterceptorMapping; -import com.opensymphony.xwork2.validator.ValidationInterceptor; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** @@ -44,6 +43,8 @@ import com.opensymphony.xwork2.validator.ValidationInterceptor; public class FormTagTest extends AbstractUITagTest { public void testFormWithActionAttributeContainingBothActionAndMethod() throws Exception { + TestAction testAction = (TestAction) action; + FormTag tag = new FormTag(); tag.setPageContext(pageContext); tag.setName("myForm"); @@ -62,6 +63,8 @@ public class FormTagTest extends AbstractUITagTest { public void testFormWithActionAttributeContainingBothActionAndMethodAndNamespace() throws Exception { + TestAction testAction = (TestAction) action; + FormTag tag = new FormTag(); tag.setPageContext(pageContext); tag.setName("myForm"); diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/HeadTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/HeadTagTest.java index fc92f2cdd..b1cfd5cf8 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/HeadTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/HeadTagTest.java @@ -17,8 +17,8 @@ */ package org.apache.struts2.views.jsp.ui; -import org.apache.struts2.components.Head; import org.apache.struts2.views.jsp.AbstractUITagTest; +import org.apache.struts2.components.Head; /** * Unit test for {@link HeadTag}. diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/HiddenTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/HiddenTest.java index f30fec905..a983f9691 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/HiddenTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/HiddenTest.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.HashMap; -import java.util.Map; - import org.apache.struts2.TestAction; import org.apache.struts2.views.jsp.AbstractUITagTest; +import java.util.Map; +import java.util.HashMap; + /** */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/JspTemplateTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/JspTemplateTest.java index c5efac776..8b1eff547 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/JspTemplateTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/JspTemplateTest.java @@ -17,15 +17,14 @@ */ package org.apache.struts2.views.jsp.ui; -import javax.servlet.RequestDispatcher; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.mockobjects.dynamic.C; +import com.mockobjects.dynamic.Mock; import org.apache.struts2.TestAction; import org.apache.struts2.views.jsp.AbstractUITagTest; -import com.mockobjects.dynamic.C; -import com.mockobjects.dynamic.Mock; +import javax.servlet.RequestDispatcher; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** * JspTemplateTest diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/LabelTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/LabelTest.java index ec4dfdac8..d457b8999 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/LabelTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/LabelTest.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.HashMap; -import java.util.Map; - import org.apache.struts2.TestAction; import org.apache.struts2.views.jsp.AbstractUITagTest; +import java.util.Map; +import java.util.HashMap; + /** */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/MockTag.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/MockTag.java index 89ac0fa12..546de805f 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/MockTag.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/MockTag.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.views.jsp.ui; +import javax.servlet.jsp.tagext.BodyTagSupport; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; -import javax.servlet.jsp.tagext.BodyTagSupport; - /** */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java index 541c8b37f..baf6c4596 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.HashMap; -import java.util.LinkedHashMap; - import org.apache.struts2.TestAction; import org.apache.struts2.views.jsp.AbstractUITagTest; +import java.util.HashMap; +import java.util.LinkedHashMap; + /** */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/ResetTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/ResetTest.java index df333e294..0994526ac 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/ResetTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/ResetTest.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.HashMap; -import java.util.Map; - import org.apache.struts2.TestAction; import org.apache.struts2.views.jsp.AbstractUITagTest; +import java.util.HashMap; +import java.util.Map; + /** * Reset Component Test. * diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java index a56e15b9b..006048634 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java @@ -17,14 +17,14 @@ */ package org.apache.struts2.views.jsp.ui; +import org.apache.struts2.TestAction; +import org.apache.struts2.views.jsp.AbstractUITagTest; + import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import org.apache.struts2.TestAction; -import org.apache.struts2.views.jsp.AbstractUITagTest; - /** */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/StrutsBodyContent.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/StrutsBodyContent.java index 6a9968fa4..9e1a0e78f 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/StrutsBodyContent.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/StrutsBodyContent.java @@ -17,14 +17,13 @@ */ package org.apache.struts2.views.jsp.ui; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.tagext.BodyContent; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.io.Writer; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.BodyContent; - /** * StrutsBodyContent diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java index 6cc5c24c0..1d3ec194b 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitAjaxTest.java @@ -18,6 +18,8 @@ package org.apache.struts2.views.jsp.ui; import org.apache.struts2.views.jsp.AbstractUITagTest; +import org.apache.struts2.views.jsp.ui.AnchorTest; +import org.apache.struts2.views.jsp.ui.SubmitTag; /** * Test Submit component in "ajax" theme. diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitTest.java index 9f32765f1..c44be1518 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/SubmitTest.java @@ -17,12 +17,12 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.HashMap; -import java.util.Map; - import org.apache.struts2.TestAction; import org.apache.struts2.views.jsp.AbstractUITagTest; +import java.util.Map; +import java.util.HashMap; + /** * Unit test for {@link SubmitTag}. diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/TextareaTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/TextareaTest.java index df79971fb..7cec6fd07 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/TextareaTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/TextareaTest.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.Map; - import org.apache.struts2.TestAction; import org.apache.struts2.views.jsp.AbstractUITagTest; +import java.util.Map; + /** */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java index 5796b1e36..f1c81f8fb 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java @@ -17,15 +17,14 @@ */ package org.apache.struts2.views.jsp.ui; -import java.util.HashMap; -import java.util.Map; - import org.apache.struts2.TestAction; import org.apache.struts2.views.freemarker.tags.TextFieldModel; import org.apache.struts2.views.jsp.AbstractUITagTest; - import freemarker.template.TransformControl; +import java.util.HashMap; +import java.util.Map; + /** */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java index 500519e6e..eeba8caa5 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java @@ -17,11 +17,11 @@ */ package org.apache.struts2.views.jsp.ui; -import javax.servlet.jsp.JspException; - import org.apache.struts2.util.TokenHelper; import org.apache.struts2.views.jsp.AbstractUITagTest; +import javax.servlet.jsp.JspException; + /** * TokenTagTest diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java index 0e1b9fff1..93326a532 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java @@ -17,13 +17,12 @@ */ package org.apache.struts2.views.jsp.ui; +import com.mockobjects.servlet.MockJspWriter; import org.apache.struts2.TestConfigurationProvider; import org.apache.struts2.views.jsp.AbstractUITagTest; import org.apache.struts2.views.jsp.ParamTag; import org.apache.struts2.views.jsp.StrutsMockBodyContent; -import com.mockobjects.servlet.MockJspWriter; - /** * UI components Tooltip test case. */ diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/UpDownSelectTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/UpDownSelectTagTest.java index b3cad78c0..d1ddab301 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/UpDownSelectTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/UpDownSelectTagTest.java @@ -23,7 +23,6 @@ import java.util.List; import java.util.Map; import org.apache.struts2.views.jsp.AbstractUITagTest; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; diff --git a/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java b/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java index ea3d94cb8..b3060c5a3 100755 --- a/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java +++ b/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java @@ -17,12 +17,10 @@ */ package org.apache.struts2.views.util; -import junit.framework.TestCase; - -import org.apache.struts2.StrutsConstants; import org.apache.struts2.config.Settings; - +import org.apache.struts2.StrutsConstants; import com.opensymphony.xwork2.util.OgnlValueStack; +import junit.framework.TestCase; /** * Test case for ContextUtil diff --git a/core/src/test/java/org/apache/struts2/views/util/ResourceUtilTest.java b/core/src/test/java/org/apache/struts2/views/util/ResourceUtilTest.java index 2ee6c0586..a0f49fb30 100644 --- a/core/src/test/java/org/apache/struts2/views/util/ResourceUtilTest.java +++ b/core/src/test/java/org/apache/struts2/views/util/ResourceUtilTest.java @@ -20,12 +20,11 @@ package org.apache.struts2.views.util; * ResourceUtilTest * */ -import javax.servlet.http.HttpServletRequest; - import junit.framework.TestCase; - import org.easymock.MockControl; +import javax.servlet.http.HttpServletRequest; + public class ResourceUtilTest extends TestCase { private MockControl control; diff --git a/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java b/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java index 6d39b8000..798ca6fbf 100644 --- a/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java +++ b/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java @@ -17,19 +17,19 @@ */ package org.apache.struts2.views.util; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.TreeMap; +import com.mockobjects.dynamic.Mock; +import org.apache.struts2.StrutsTestCase; +import org.apache.struts2.StrutsConstants; +import org.apache.struts2.config.Settings; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.StrutsTestCase; -import org.apache.struts2.config.Settings; - -import com.mockobjects.dynamic.Mock; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.TreeMap; +import java.util.HashMap; /** @@ -282,6 +282,21 @@ public class UrlHelperTest extends StrutsTestCase { assertEquals(result.get("ccc"), ""); } + public void testParseEmptyQuery() throws Exception { + Map result = UrlHelper.parseQueryString(""); + + assertNotNull(result); + assertEquals(result.size(), 0); + } + + public void testParseNullQuery() throws Exception { + Map result = UrlHelper.parseQueryString(null); + + assertNotNull(result); + assertEquals(result.size(), 0); + } + + public void testTranslateAndEncode() throws Exception { String defaultI18nEncoding = Settings.get(StrutsConstants.STRUTS_I18N_ENCODING); try { diff --git a/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java b/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java index 4fc99591a..1994a3b66 100644 --- a/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java +++ b/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java @@ -17,22 +17,21 @@ */ package org.apache.struts2.views.xslt; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.transform.TransformerException; - import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsTestCase; +import com.opensymphony.xwork2.Action; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.mock.MockActionInvocation; +import com.opensymphony.xwork2.util.OgnlValueStack; +import junit.framework.TestCase; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockServletContext; -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.mock.MockActionInvocation; -import com.opensymphony.xwork2.util.OgnlValueStack; +import javax.xml.transform.TransformerException; +import java.util.List; +import java.util.ArrayList; /** * Unit test for {@link XSLTResult}. diff --git a/core/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-input.ftl b/core/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-input.ftl index a1b493fef..b031ee24f 100644 --- a/core/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-input.ftl +++ b/core/src/test/resources/org/apache/struts2/sitegraph/tutorial/sitegraph/guess-input.ftl @@ -4,9 +4,9 @@ -<@ww.form action="guess" method="post"> - <@ww.textfield label="Guess a number" name="guess"/> - <@ww.submit value="Guess"/> - +<@s.form action="guess" method="post"> + <@s.textfield label="Guess a number" name="guess"/> + <@s.submit value="Guess"/> + diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-1.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-1.txt index eb73cbe33..850faa108 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-1.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-1.txt @@ -2,6 +2,3 @@
      - - - diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-10.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-10.txt index efa7886d2..5e6c687f4 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-10.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-10.txt @@ -2,6 +2,3 @@
      - - - diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-11.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-11.txt index 9de19b43e..2bec0d15c 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-11.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-11.txt @@ -28,7 +28,3 @@ selectAllOptionsExceptSome(updownselectObj, "key", ""); }); - - - - diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt index e8e045da2..6c351d825 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt @@ -29,9 +29,6 @@ }); - - - - diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-4.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-4.txt index bfbad183d..6cb85c474 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-4.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-4.txt @@ -2,7 +2,3 @@
      - - - - diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-5.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-5.txt index c2dee453f..9ceee9b60 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-5.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-5.txt @@ -2,7 +2,3 @@
      - - - - diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-6.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-6.txt index 3faaed0b0..e0ae67ef1 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-6.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-6.txt @@ -27,7 +27,3 @@ selectAllOptionsExceptSome(updownselectObj, "key", ""); }); - - - - diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-7.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-7.txt index 7e13fb87f..5cbaf3033 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-7.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-7.txt @@ -2,7 +2,3 @@
      - - - - diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-8.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-8.txt index c2dee453f..9ceee9b60 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-8.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-8.txt @@ -2,7 +2,3 @@
      - - - - diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-9.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-9.txt index 81ad550ce..6fdb01aae 100644 --- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-9.txt +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-9.txt @@ -2,6 +2,3 @@
      - - - diff --git a/core/src/test/resources/template/test/checkbox.jsp b/core/src/test/resources/template/test/checkbox.jsp index 16e5da3d5..dc82fccd0 100644 --- a/core/src/test/resources/template/test/checkbox.jsp +++ b/core/src/test/resources/template/test/checkbox.jsp @@ -1,4 +1,4 @@ -<%@ taglib prefix="s" uri="/tags" %> +<%@ taglib prefix="s" uri="/struts-tags" %> checked="checked" name=""