http://git-wip-us.apache.org/repos/asf/struts-site/blob/124e36c4/content/docs/debugging.html ---------------------------------------------------------------------- diff --git a/content/docs/debugging.html b/content/docs/debugging.html new file mode 100644 index 0000000..c815cff --- /dev/null +++ b/content/docs/debugging.html @@ -0,0 +1,197 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> +<html> +<head> + <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css"> + <style type="text/css"> + .dp-highlighter { + width:95% !important; + } + </style> + <style type="text/css"> + .footer { + background-image: url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif'); + background-repeat: repeat-x; + background-position: left top; + padding-top: 4px; + color: #666; + } + </style> + <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' /> + <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' /> + <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script> + <script type="text/javascript"> + SyntaxHighlighter.defaults['toolbar'] = false; + SyntaxHighlighter.all(); + </script> + <script type="text/javascript" language="javascript"> + var hide = null; + var show = null; + var children = null; + + function init() { + /* Search form initialization */ + var form = document.forms['search']; + if (form != null) { + form.elements['domains'].value = location.hostname; + form.elements['sitesearch'].value = location.hostname; + } + + /* Children initialization */ + hide = document.getElementById('hide'); + show = document.getElementById('show'); + children = document.all != null ? + document.all['children'] : + document.getElementById('children'); + if (children != null) { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + } + + function showChildren() { + children.style.display = 'block'; + show.style.display = 'none'; + hide.style.display = 'inline'; + } + + function hideChildren() { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + </script> + <title>Debugging</title> +</head> +<body onload="init()"> +<table border="0" cellpadding="2" cellspacing="0" width="100%"> + <tr class="topBar"> + <td align="left" valign="middle" class="topBarDiv" align="left" nowrap> + <a href="home.html">Home</a> > <a href="guides.html">Guides</a> > <a href="core-developers-guide.html">Core Developers Guide</a> > <a href="debugging.html">Debugging</a> + </td> + <td align="right" valign="middle" nowrap> + <form name="search" action="https://www.google.com/search" method="get"> + <input type="hidden" name="ie" value="UTF-8" /> + <input type="hidden" name="oe" value="UTF-8" /> + <input type="hidden" name="domains" value="" /> + <input type="hidden" name="sitesearch" value="" /> + <input type="text" name="q" maxlength="255" value="" /> + <input type="submit" name="btnG" value="Google Search" /> + </form> + </td> + </tr> +</table> + +<div id="PageContent"> + <div class="pageheader" style="padding: 6px 0px 0px 0px;"> + <!-- We'll enable this once we figure out how to access (and save) the logo resource --> + <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"--> + <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div> + <div style="margin: 0px 10px 8px 10px" class="pagetitle">Debugging</div> + + <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;"> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=29096"> + <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=29096">Edit Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW"> + <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif" + height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a> + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a> + + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=29096"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=29096">Add Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=29096"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add News"></a> + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=29096">Add News</a> + </div> + </div> + + <div class="pagecontent"> + <div class="wiki-content"> + <div id="ConfluenceContent"><p>Modern IDEs provide excellent support for debugging. In addition, the framework provides support for inspecting framework-specific objects at runtime.</p><p>The <a shape="rect" href="debugginginterceptor.html">Debugging Interceptor</a> provides three debugging modes to provide insight into the data behind the page. The <code>xml</code> mode formats relevant framework objects as an XML document. The <code>console</code> mode provides a OGNL command line that accepts entry of runtime expressions, and the <code>browser</code> mode adds an interactive page that display objects from the Value Stack.</p><p>To use the debugging, first be sure that <code>struts.devMode</code> is set to <code>true</code> is enabled through the <a shape="rect" href="strutsproperties.html">struts.properties</a> file or <code>struts.xml</code> file, like:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"><constant name="struts.devMode" value="true" /> +</pre> +</div></div><p>Then, whenever a page needs debugging, add <code>?debug=xml</code> or <code>?debug=console</code> or <code>?debug=browser</code> to the URL.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">- <debug> + <parameters /> +- <context> +- <struts.actionMapping> + <class>class org.apache.struts2.dispatcher.mapper.ActionMapping</class> + <name>showcase</name> + <namespace>/</namespace> + </struts.actionMapping> + <attr /> + <__devMode>true</__devMode> + <report.conversion.errors>false</report.conversion.errors> + </context> + <request /> + <session /> +- <valueStack> +- <value> + <actionErrors /> + <actionMessages /> + <class>class com.opensymphony.xwork2.ActionSupport</class> + <errorMessages /> + <errors /> + <fieldErrors /> +- <locale> + <ISO3Country>USA</ISO3Country> + <ISO3Language>eng</ISO3Language> + <class>class java.util.Locale</class> + <country>US</country> + <displayCountry>United States</displayCountry> + <displayLanguage>English</displayLanguage> + <displayName>English (United States)</displayName> + <displayVariant /> + <language>en</language> + <variant /> + </locale> + </value> +- <value> + <class>class com.opensymphony.xwork2.DefaultTextProvider</class> + </value> + </valueStack> + </debug> +</pre> +</div></div><div class="confluence-information-macro confluence-information-macro-tip"><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>For <code>?debug=xml</code> use Internet Explorer or an <a shape="rect" class="external-link" href="http://ietab.mozdev.org/" rel="nofollow">IE tab in FireFox</a></p></div></div><div class="confluence-information-macro confluence-information-macro-tip"><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>For <code>?debug=console</code> you may need to relax any popup blockers</p></div></div><h2 id="Debugging-Next:DevelopmentMode">Next: <a shape="rect" href="devmode.html">Development Mode</a></h2></div> + </div> + + + </div> +</div> +<div class="footer"> + Generated by CXF SiteExporter +</div> +</body> +</html>
http://git-wip-us.apache.org/repos/asf/struts-site/blob/124e36c4/content/docs/debugginginterceptor.html ---------------------------------------------------------------------- diff --git a/content/docs/debugginginterceptor.html b/content/docs/debugginginterceptor.html new file mode 100644 index 0000000..fe38816 --- /dev/null +++ b/content/docs/debugginginterceptor.html @@ -0,0 +1,175 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> +<html> +<head> + <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css"> + <style type="text/css"> + .dp-highlighter { + width:95% !important; + } + </style> + <style type="text/css"> + .footer { + background-image: url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif'); + background-repeat: repeat-x; + background-position: left top; + padding-top: 4px; + color: #666; + } + </style> + <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' /> + <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' /> + <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script> + <script type="text/javascript"> + SyntaxHighlighter.defaults['toolbar'] = false; + SyntaxHighlighter.all(); + </script> + <script type="text/javascript" language="javascript"> + var hide = null; + var show = null; + var children = null; + + function init() { + /* Search form initialization */ + var form = document.forms['search']; + if (form != null) { + form.elements['domains'].value = location.hostname; + form.elements['sitesearch'].value = location.hostname; + } + + /* Children initialization */ + hide = document.getElementById('hide'); + show = document.getElementById('show'); + children = document.all != null ? + document.all['children'] : + document.getElementById('children'); + if (children != null) { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + } + + function showChildren() { + children.style.display = 'block'; + show.style.display = 'none'; + hide.style.display = 'inline'; + } + + function hideChildren() { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + </script> + <title>DebuggingInterceptor</title> +</head> +<body onload="init()"> +<table border="0" cellpadding="2" cellspacing="0" width="100%"> + <tr class="topBar"> + <td align="left" valign="middle" class="topBarDiv" align="left" nowrap> + <a href="home.html">Home</a> > <a href="guides.html">Guides</a> > <a href="core-developers-guide.html">Core Developers Guide</a> > <a href="interceptors.html">Interceptors</a> > <a href="debugginginterceptor.html">DebuggingInterceptor</a> + </td> + <td align="right" valign="middle" nowrap> + <form name="search" action="https://www.google.com/search" method="get"> + <input type="hidden" name="ie" value="UTF-8" /> + <input type="hidden" name="oe" value="UTF-8" /> + <input type="hidden" name="domains" value="" /> + <input type="hidden" name="sitesearch" value="" /> + <input type="text" name="q" maxlength="255" value="" /> + <input type="submit" name="btnG" value="Google Search" /> + </form> + </td> + </tr> +</table> + +<div id="PageContent"> + <div class="pageheader" style="padding: 6px 0px 0px 0px;"> + <!-- We'll enable this once we figure out how to access (and save) the logo resource --> + <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"--> + <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div> + <div style="margin: 0px 10px 8px 10px" class="pagetitle">DebuggingInterceptor</div> + + <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;"> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=29092"> + <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=29092">Edit Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW"> + <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif" + height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a> + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a> + + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=29092"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=29092">Add Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=29092"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add News"></a> + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=29092">Add News</a> + </div> + </div> + + <div class="pagecontent"> + <div class="wiki-content"> + <div id="ConfluenceContent"><p> +Provides several different debugging screens to provide insight into the +data behind the page. +</p> + +<p>This interceptor only is activated when devMode is enabled in +struts.properties. The 'debug' parameter is removed from the parameter list +before the action is executed. All operations occur before the natural +Result has a chance to execute.</p> + +<h2 id="DebuggingInterceptor-Parameters">Parameters</h2> + +<p></p><ul><li> <code>xml</code> - Dumps the parameters, context, session, and value +stack as an XML document.</li><li> <code>console</code> - Shows a popup 'OGNL Console' that allows the +user to test OGNL expressions against the value stack. The XML data from +the 'xml' mode is inserted at the top of the page.</li><li> <code>command</code> - Tests an OGNL expression and returns the +string result. Only used by the OGNL console.</li><li><code>browser</code> Shows field values of an object specified in the +<code>object</code> parameter (#context by default). When the <code>object</code> +parameters is set, the '#' character needs to be escaped to '%23'. Like +debug=browser&object=%23parameters</li></ul> + +<h2 id="DebuggingInterceptor-Example">Example</h2> + +<p>http://localhost:8080/Welcome.action?debug=xml</p></div> + </div> + + + </div> +</div> +<div class="footer"> + Generated by CXF SiteExporter +</div> +</body> +</html> http://git-wip-us.apache.org/repos/asf/struts-site/blob/124e36c4/content/docs/default-workflow-interceptor.html ---------------------------------------------------------------------- diff --git a/content/docs/default-workflow-interceptor.html b/content/docs/default-workflow-interceptor.html new file mode 100644 index 0000000..cba3b9e --- /dev/null +++ b/content/docs/default-workflow-interceptor.html @@ -0,0 +1,240 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> +<html> +<head> + <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css"> + <style type="text/css"> + .dp-highlighter { + width:95% !important; + } + </style> + <style type="text/css"> + .footer { + background-image: url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif'); + background-repeat: repeat-x; + background-position: left top; + padding-top: 4px; + color: #666; + } + </style> + <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' /> + <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' /> + <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script> + <script type="text/javascript"> + SyntaxHighlighter.defaults['toolbar'] = false; + SyntaxHighlighter.all(); + </script> + <script type="text/javascript" language="javascript"> + var hide = null; + var show = null; + var children = null; + + function init() { + /* Search form initialization */ + var form = document.forms['search']; + if (form != null) { + form.elements['domains'].value = location.hostname; + form.elements['sitesearch'].value = location.hostname; + } + + /* Children initialization */ + hide = document.getElementById('hide'); + show = document.getElementById('show'); + children = document.all != null ? + document.all['children'] : + document.getElementById('children'); + if (children != null) { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + } + + function showChildren() { + children.style.display = 'block'; + show.style.display = 'none'; + hide.style.display = 'inline'; + } + + function hideChildren() { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + </script> + <title>Default Workflow Interceptor</title> +</head> +<body onload="init()"> +<table border="0" cellpadding="2" cellspacing="0" width="100%"> + <tr class="topBar"> + <td align="left" valign="middle" class="topBarDiv" align="left" nowrap> + <a href="home.html">Home</a> > <a href="guides.html">Guides</a> > <a href="core-developers-guide.html">Core Developers Guide</a> > <a href="interceptors.html">Interceptors</a> > <a href="default-workflow-interceptor.html">Default Workflow Interceptor</a> + </td> + <td align="right" valign="middle" nowrap> + <form name="search" action="https://www.google.com/search" method="get"> + <input type="hidden" name="ie" value="UTF-8" /> + <input type="hidden" name="oe" value="UTF-8" /> + <input type="hidden" name="domains" value="" /> + <input type="hidden" name="sitesearch" value="" /> + <input type="text" name="q" maxlength="255" value="" /> + <input type="submit" name="btnG" value="Google Search" /> + </form> + </td> + </tr> +</table> + +<div id="PageContent"> + <div class="pageheader" style="padding: 6px 0px 0px 0px;"> + <!-- We'll enable this once we figure out how to access (and save) the logo resource --> + <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"--> + <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div> + <div style="margin: 0px 10px 8px 10px" class="pagetitle">Default Workflow Interceptor</div> + + <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;"> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=13995"> + <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=13995">Edit Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW"> + <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif" + height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a> + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a> + + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=13995"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=13995">Add Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=13995"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add News"></a> + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=13995">Add News</a> + </div> + </div> + + <div class="pagecontent"> + <div class="wiki-content"> + <div id="ConfluenceContent"><p> +An interceptor that makes sure there are not validation, conversion or action errors before allowing the interceptor chain to continue. +If a single FieldError or ActionError (including the ones replicated by the Message Store Interceptor in a redirection) is found, the INPUT result will be triggered. +<b>This interceptor does not perform any validation</b>. +</p> + +<p></p><p> +This interceptor does nothing if the name of the method being invoked is specified in the <b>excludeMethods</b> +parameter. <b>excludeMethods</b> accepts a comma-delimited list of method names. For example, requests to +<b>foo!input.action</b> and <b>foo!back.action</b> will be skipped by this interceptor if you set the +<b>excludeMethods</b> parameter to "input, back". +</p> + +<p></p><p> +<b>Note:</b> As this method extends off MethodFilterInterceptor, it is capable of +deciding if it is applicable only to selective methods in the action class. This is done by adding param tags +for the interceptor element, naming either a list of excluded method names and/or a list of included method +names, whereby includeMethods overrides excludedMethods. A single * sign is interpreted as wildcard matching +all methods for both parameters. +See MethodFilterInterceptor for more info. +</p> + +<p></p><p> +This interceptor also supports the following interfaces which can implemented by actions: +</p> + +<p></p><ul><li>ValidationAware - implemented by ActionSupport class</li><li>ValidationWorkflowAware - allows changing result name programmatically</li><li>ValidationErrorAware - notifies action about errors and also allow change result name</li></ul> + +<p></p><p> +You can also use InputConfig annotation to change result name returned when validation errors occurred. +</p> + + +<p><b>In DefaultWorkflowInterceptor</b> +</p><p>applies only when action implements com.opensymphony.xwork2.Validateable</p> +<ol><li>if the action class have validate{MethodName}(), it will be invoked</li><li>else if the action class have validateDo{MethodName}(), it will be invoked</li><li>no matter if 1] or 2] is performed, if alwaysInvokeValidate property of the interceptor is "true" (which is by default "true"), validate() will be invoked.</li></ol> + + +<h2 id="DefaultWorkflowInterceptor-Parameters">Parameters</h2> + +<p></p><ul><li>inputResultName - Default to "input". Determine the result name to be returned when +an action / field error is found.</li></ul> + +<h2 id="DefaultWorkflowInterceptor-ExtendingtheInterceptor">Extending the Interceptor</h2> + + +<p></p><p>There are no known extension points for this interceptor.</p> + + +<h2 id="DefaultWorkflowInterceptor-Examples">Examples</h2> + +<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ + +<action name="someAction" class="com.examples.SomeAction"> + <interceptor-ref name="params"/> + <interceptor-ref name="validation"/> + <interceptor-ref name="workflow"/> + <result name="success">good_result.ftl</result> +</action> + +<-- In this case myMethod as well as mySecondMethod of the action class + will not pass through the workflow process --> +<action name="someAction" class="com.examples.SomeAction"> + <interceptor-ref name="params"/> + <interceptor-ref name="validation"/> + <interceptor-ref name="workflow"> + <param name="excludeMethods">myMethod,mySecondMethod</param> + </interceptor-ref name="workflow"> + <result name="success">good_result.ftl</result> +</action> + +<-- In this case, the result named "error" will be used when + an action / field error is found --> +<-- The Interceptor will only be applied for myWorkflowMethod method of action + classes, since this is the only included method while any others are excluded --> +<action name="someAction" class="com.examples.SomeAction"> + <interceptor-ref name="params"/> + <interceptor-ref name="validation"/> + <interceptor-ref name="workflow"> + <param name="inputResultName">error</param> + <param name="excludeMethods">*</param> + <param name="includeMethods">myWorkflowMethod</param> + </interceptor-ref> + <result name="success">good_result.ftl</result> +</action> + +]]></script> +</div></div></div> + </div> + + + </div> +</div> +<div class="footer"> + Generated by CXF SiteExporter +</div> +</body> +</html> http://git-wip-us.apache.org/repos/asf/struts-site/blob/124e36c4/content/docs/dependency-injection.html ---------------------------------------------------------------------- diff --git a/content/docs/dependency-injection.html b/content/docs/dependency-injection.html new file mode 100644 index 0000000..731d5b7 --- /dev/null +++ b/content/docs/dependency-injection.html @@ -0,0 +1,146 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> +<html> +<head> + <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css"> + <style type="text/css"> + .dp-highlighter { + width:95% !important; + } + </style> + <style type="text/css"> + .footer { + background-image: url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif'); + background-repeat: repeat-x; + background-position: left top; + padding-top: 4px; + color: #666; + } + </style> + <script type="text/javascript" language="javascript"> + var hide = null; + var show = null; + var children = null; + + function init() { + /* Search form initialization */ + var form = document.forms['search']; + if (form != null) { + form.elements['domains'].value = location.hostname; + form.elements['sitesearch'].value = location.hostname; + } + + /* Children initialization */ + hide = document.getElementById('hide'); + show = document.getElementById('show'); + children = document.all != null ? + document.all['children'] : + document.getElementById('children'); + if (children != null) { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + } + + function showChildren() { + children.style.display = 'block'; + show.style.display = 'none'; + hide.style.display = 'inline'; + } + + function hideChildren() { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + </script> + <title>Dependency Injection</title> +</head> +<body onload="init()"> +<table border="0" cellpadding="2" cellspacing="0" width="100%"> + <tr class="topBar"> + <td align="left" valign="middle" class="topBarDiv" align="left" nowrap> + <a href="home.html">Home</a> > <a href="guides.html">Guides</a> > <a href="core-developers-guide.html">Core Developers Guide</a> > <a href="dependency-injection.html">Dependency Injection</a> + </td> + <td align="right" valign="middle" nowrap> + <form name="search" action="https://www.google.com/search" method="get"> + <input type="hidden" name="ie" value="UTF-8" /> + <input type="hidden" name="oe" value="UTF-8" /> + <input type="hidden" name="domains" value="" /> + <input type="hidden" name="sitesearch" value="" /> + <input type="text" name="q" maxlength="255" value="" /> + <input type="submit" name="btnG" value="Google Search" /> + </form> + </td> + </tr> +</table> + +<div id="PageContent"> + <div class="pageheader" style="padding: 6px 0px 0px 0px;"> + <!-- We'll enable this once we figure out how to access (and save) the logo resource --> + <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"--> + <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div> + <div style="margin: 0px 10px 8px 10px" class="pagetitle">Dependency Injection</div> + + <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;"> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=13870"> + <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=13870">Edit Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW"> + <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif" + height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a> + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a> + + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=13870"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=13870">Add Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=13870"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add News"></a> + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=13870">Add News</a> + </div> + </div> + + <div class="pagecontent"> + <div class="wiki-content"> + <div id="ConfluenceContent"><div class="confluence-information-macro confluence-information-macro-tip"><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Dependency injection removes the responsibility for object creation and object linking from the objects themselves to a factory. The factory is often provided by an Inversion of Control (IoC) container. For an overview of Inversion of Control containers and the Dependency Injection pattern, please see <a shape="rect" class="external-link" href="http://www.martinfowler.com/articles/injection.html" rel="nofollow">Martin Fowler's article</a>.</p></div></div> + +<p>Internally, the framework uses its own dependency injection container that is very similar to Google Guice. Both were originally developed by <a shape="rect" class="external-link" href="http://blog.crazybob.org/" rel="nofollow">Bob Lee</a>. Plugins are available to integrate applications with other IoC containers (e.g. <a shape="rect" class="unresolved" href="#">Spring Plugin</a>, <a shape="rect" class="unresolved" href="#">Plexus Plugin</a>). An application can even use a local copy of Google Guice for dependency injection needs. </p> + +<p><img class="emoticon emoticon-information" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/information.png" data-emoticon-name="information" alt="(info)"> Actions can still be instantiated via Spring configuration by way of the <a shape="rect" class="unresolved" href="#">Spring Plugin</a>, but Spring is entirely optional.</p> + +<p><img class="emoticon emoticon-warning" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/warning.png" data-emoticon-name="warning" alt="(warning)"> The WebWork/XWork IoC container utilized by WebWork 2.1 is not supported by Struts 2.</p> + +<h2 id="DependencyInjection-Next:">Next: <a shape="rect" href="profiling.html">Profiling</a></h2></div> + </div> + + + </div> +</div> +<div class="footer"> + Generated by CXF SiteExporter +</div> +</body> +</html> http://git-wip-us.apache.org/repos/asf/struts-site/blob/124e36c4/content/docs/describing-a-bean-in-velocity.html ---------------------------------------------------------------------- diff --git a/content/docs/describing-a-bean-in-velocity.html b/content/docs/describing-a-bean-in-velocity.html new file mode 100644 index 0000000..83a16c8 --- /dev/null +++ b/content/docs/describing-a-bean-in-velocity.html @@ -0,0 +1,171 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> +<html> +<head> + <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css"> + <style type="text/css"> + .dp-highlighter { + width:95% !important; + } + </style> + <style type="text/css"> + .footer { + background-image: url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif'); + background-repeat: repeat-x; + background-position: left top; + padding-top: 4px; + color: #666; + } + </style> + <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' /> + <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' /> + <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script> + <script type="text/javascript"> + SyntaxHighlighter.defaults['toolbar'] = false; + SyntaxHighlighter.all(); + </script> + <script type="text/javascript" language="javascript"> + var hide = null; + var show = null; + var children = null; + + function init() { + /* Search form initialization */ + var form = document.forms['search']; + if (form != null) { + form.elements['domains'].value = location.hostname; + form.elements['sitesearch'].value = location.hostname; + } + + /* Children initialization */ + hide = document.getElementById('hide'); + show = document.getElementById('show'); + children = document.all != null ? + document.all['children'] : + document.getElementById('children'); + if (children != null) { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + } + + function showChildren() { + children.style.display = 'block'; + show.style.display = 'none'; + hide.style.display = 'inline'; + } + + function hideChildren() { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + </script> + <title>Describing a bean in velocity</title> +</head> +<body onload="init()"> +<table border="0" cellpadding="2" cellspacing="0" width="100%"> + <tr class="topBar"> + <td align="left" valign="middle" class="topBarDiv" align="left" nowrap> + <a href="home.html">Home</a> > <a href="faqs.html">FAQs</a> > <a href="cookbook.html">Cookbook</a> > <a href="describing-a-bean-in-velocity.html">Describing a bean in velocity</a> + </td> + <td align="right" valign="middle" nowrap> + <form name="search" action="https://www.google.com/search" method="get"> + <input type="hidden" name="ie" value="UTF-8" /> + <input type="hidden" name="oe" value="UTF-8" /> + <input type="hidden" name="domains" value="" /> + <input type="hidden" name="sitesearch" value="" /> + <input type="text" name="q" maxlength="255" value="" /> + <input type="submit" name="btnG" value="Google Search" /> + </form> + </td> + </tr> +</table> + +<div id="PageContent"> + <div class="pageheader" style="padding: 6px 0px 0px 0px;"> + <!-- We'll enable this once we figure out how to access (and save) the logo resource --> + <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"--> + <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div> + <div style="margin: 0px 10px 8px 10px" class="pagetitle">Describing a bean in velocity</div> + + <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;"> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14173"> + <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=14173">Edit Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW"> + <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif" + height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a> + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a> + + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14173"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=14173">Add Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14173"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add News"></a> + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=14173">Add News</a> + </div> + </div> + + <div class="pagecontent"> + <div class="wiki-content"> + <div id="ConfluenceContent"><p>The follow snippet might be useful during debugging to list the properties inside an<br clear="none"> arbitary bean. Or for handing to a UI developer that use unaware of the getters/setters inside an object.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<pre class="brush: text; gutter: false; theme: Default" style="font-size:12px;">## prints out the property names for a bean +#macro (describeBean $name) +#set($bu = $struts.bean("com.opensymphony.util.BeanUtils")) + #foreach($propName in $bu.getPropertyNames($name)) + <li>$propName</li> + #end +#end +</pre> +</div></div><p>i.e. assuming $obj is a PersonObject that has properties(firstName, lastName, and zip).</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<pre class="brush: text; gutter: false; theme: Default" style="font-size:12px;">#describeBean($obj)</pre> +</div></div><p>would print</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"><li>firstName</li> +<li>lastName</li> +<li>zip</li> +</pre> +</div></div><p>One might also expand upon this to build a dynamic interface with via reflection. e.g.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<pre class="brush: text; gutter: false; theme: Default" style="font-size:12px;">$struts.evalute("$obj.${propName}") +</pre> +</div></div></div> + </div> + + + </div> +</div> +<div class="footer"> + Generated by CXF SiteExporter +</div> +</body> +</html> http://git-wip-us.apache.org/repos/asf/struts-site/blob/124e36c4/content/docs/developing-a-portlet-using-eclipse.html ---------------------------------------------------------------------- diff --git a/content/docs/developing-a-portlet-using-eclipse.html b/content/docs/developing-a-portlet-using-eclipse.html new file mode 100644 index 0000000..78694e2 --- /dev/null +++ b/content/docs/developing-a-portlet-using-eclipse.html @@ -0,0 +1,242 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> +<html> +<head> + <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css"> + <style type="text/css"> + .dp-highlighter { + width:95% !important; + } + </style> + <style type="text/css"> + .footer { + background-image: url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif'); + background-repeat: repeat-x; + background-position: left top; + padding-top: 4px; + color: #666; + } + </style> + <script type="text/javascript" language="javascript"> + var hide = null; + var show = null; + var children = null; + + function init() { + /* Search form initialization */ + var form = document.forms['search']; + if (form != null) { + form.elements['domains'].value = location.hostname; + form.elements['sitesearch'].value = location.hostname; + } + + /* Children initialization */ + hide = document.getElementById('hide'); + show = document.getElementById('show'); + children = document.all != null ? + document.all['children'] : + document.getElementById('children'); + if (children != null) { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + } + + function showChildren() { + children.style.display = 'block'; + show.style.display = 'none'; + hide.style.display = 'inline'; + } + + function hideChildren() { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + </script> + <title>Developing a Portlet using Eclipse</title> +</head> +<body onload="init()"> +<table border="0" cellpadding="2" cellspacing="0" width="100%"> + <tr class="topBar"> + <td align="left" valign="middle" class="topBarDiv" align="left" nowrap> + <a href="home.html">Home</a> > <a href="tutorials.html">Tutorials</a> > <a href="developing-a-portlet-using-eclipse.html">Developing a Portlet using Eclipse</a> + </td> + <td align="right" valign="middle" nowrap> + <form name="search" action="https://www.google.com/search" method="get"> + <input type="hidden" name="ie" value="UTF-8" /> + <input type="hidden" name="oe" value="UTF-8" /> + <input type="hidden" name="domains" value="" /> + <input type="hidden" name="sitesearch" value="" /> + <input type="text" name="q" maxlength="255" value="" /> + <input type="submit" name="btnG" value="Google Search" /> + </form> + </td> + </tr> +</table> + +<div id="PageContent"> + <div class="pageheader" style="padding: 6px 0px 0px 0px;"> + <!-- We'll enable this once we figure out how to access (and save) the logo resource --> + <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"--> + <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div> + <div style="margin: 0px 10px 8px 10px" class="pagetitle">Developing a Portlet using Eclipse</div> + + <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;"> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=62489"> + <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=62489">Edit Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW"> + <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif" + height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a> + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a> + + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=62489"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=62489">Add Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=62489"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add News"></a> + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=62489">Add News</a> + </div> + </div> + + <div class="pagecontent"> + <div class="wiki-content"> + <div id="ConfluenceContent"><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The Portlet support is experimental. Feedback is appreciated!</p></div></div> + +<h1 id="DevelopingaPortletusingEclipse-Index">Index</h1> + +<ol><li><a shape="rect" href="developing-a-portlet-using-eclipse.html">Introduction</a></li><li><a shape="rect" href="developing-a-portlet-using-eclipse.html">Installing Eclipse</a></li><li><a shape="rect" href="developing-a-portlet-using-eclipse.html">Installing Maven 2</a></li><li><a shape="rect" href="developing-a-portlet-using-eclipse.html">Installing Tomcat</a></li><li><a shape="rect" href="developing-a-portlet-using-eclipse.html">Creating the project</a></li><li><a shape="rect" href="developing-a-portlet-using-eclipse.html">Eclipse project generation</a></li><li><a shape="rect" href="developing-a-portlet-using-eclipse.html">Deploy as a servlet</a></li></ol> + + +<h1 id="DevelopingaPortletusingEclipse-Step-by-StepTutorial">Step-by-Step Tutorial</h1> + + +<h2 id="DevelopingaPortletusingEclipse-Introductionintro">Introduction <span class="confluence-anchor-link" id="DevelopingaPortletusingEclipse-intro"></span></h2> + +<p>This tutorial focuses on how to create an Eclipse development environment to create and debug portlets. It does not cover portal deployment (which is different for each portal) and cheats a bit by using the struts2-archetype-portlet Maven 2 archetype. We can get away with not talking about portlet development, because Struts 2 portlet support allows a carefully-written portlet to be ran as a regular servlet application, drastically simplifying our development setup. Of course, to fully test your portlet, you will need to deploy the war into a portal server, but by running it in pure Tomcat, we can get 90% of the way there. Therefore, this tutorial requires Eclipse, Maven 2, and Tomcat to be installed.</p> + +<h2 id="DevelopingaPortletusingEclipse-InstallingEclipseinstall_eclipse">Installing Eclipse <span class="confluence-anchor-link" id="DevelopingaPortletusingEclipse-install_eclipse"></span></h2> + +<p>In the tutorial, we will be using Eclipse 3.3 which can be downloaded from <a shape="rect" class="external-link" href="http://www.eclipse.org" rel="nofollow">http://www.eclipse.org</a>. I recommend the JEE package, which contains the popular (and required for this tutorial) Web Tools Project.</p> + +<h2 id="DevelopingaPortletusingEclipse-InstallingMaven2install_maven">Installing Maven 2 <span class="confluence-anchor-link" id="DevelopingaPortletusingEclipse-install_maven"></span></h2> + +<p>Apache Maven 2 can be found at <a shape="rect" class="external-link" href="http://maven.apache.org">http://maven.apache.org</a>.</p> + +<h2 id="DevelopingaPortletusingEclipse-InstallingTomcatinstall_tomcat">Installing Tomcat <span class="confluence-anchor-link" id="DevelopingaPortletusingEclipse-install_tomcat"></span></h2> + +<p>Apache Tomcat can be found at <a shape="rect" class="external-link" href="http://tomcat.apache.org">http://tomcat.apache.org</a>. To install, simply unzip the distribution to a known location on your hard drive.</p> + +<h2 id="DevelopingaPortletusingEclipse-Creatingtheprojectcreate_project">Creating the project <span class="confluence-anchor-link" id="DevelopingaPortletusingEclipse-create_project"></span></h2> + +<p>To start, we will use the Struts 2 portlet Maven archetype, struts2-archetype-portlet, which will create a new portlet project will all the necessary files for a simple "hello world"-style portlet. Open a terminal and type:</p> + +<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent"> +<pre>mvn archetype:create -DgroupId=com.mycompany.myportlet \ + -DartifactId=myportlet \ + -DarchetypeGroupId=org.apache.struts \ + -DarchetypeArtifactId=struts2-archetype-portlet \ + -DarchetypeVersion=2.0.9-SNAPSHOT \ + -DremoteRepositories=http://people.apache.org/repo/m2-snapshot-repository +</pre> +</div></div> + +<div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> +<p>Aternatively, you can use <a shape="rect" class="external-link" href="http://code.google.com/p/archy/" rel="nofollow">Archy</a>, a tool that provides an interactive command-line front-end to Maven Archetypes.</p></div></div> +<p>This will result in the following layout:</p> + +<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent"> +<pre>./src/main/java/com/mycompany/myportlet/view/IndexAction.java +./src/main/java/com/mycompany/myportlet/edit/IndexAction.java +./src/main/webapp/WEB-INF/web.xml +./src/main/webapp/WEB-INF/view/index.jsp +./src/main/webapp/WEB-INF/portlet.xml +./src/main/webapp/WEB-INF/edit/index-success.jsp +./src/main/webapp/WEB-INF/edit/index-input.jsp +./src/main/webapp/WEB-INF/help/index.jsp +./src/main/webapp/index.jsp +./src/main/resources/struts.xml +./pom.xml +</pre> +</div></div> + +<p>As you can see, this portlet comes with a simple "hello world" view, but also default edit and help screens.</p> + +<h2 id="DevelopingaPortletusingEclipse-Eclipseprojectgenerationeclipse_generation">Eclipse project generation <span class="confluence-anchor-link" id="DevelopingaPortletusingEclipse-eclipse_generation"></span></h2> + +<p>A nice benefit of the Maven 2 build that new project comes equipped with is Maven 2 has a plugin that will generate all our Eclipse configuration. Move into the 'myportlet' directory and type:</p> + +<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent"> +<pre>mvn -Dwtpversion=1.0 -DdownloadSources=true eclipse:eclipse +</pre> +</div></div> + +<div class="confluence-information-macro confluence-information-macro-note"><p class="title">First Eclipse and Maven project?</p><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> +<p>If this is your first time using Eclipse and Maven, Eclipse needs to know the path to the local maven repository. Therefore the classpath variable M2_REPO has to be set. Execute the following command:</p> +<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent"> +<pre>mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo +</pre> +</div></div> +<p>You can also define a new classpath variable inside eclipse: From the menu bar, select Window > Preferences. Select the Java > Build Path > Classpath Variables page.</p></div></div> + +<div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> +<p>For more information on the Maven Eclipse plugin, see its <a shape="rect" class="external-link" href="http://maven.apache.org/plugins/maven-eclipse-plugin/overview.html">homepage</a></p></div></div> + +<p>Now, your generated 'myportlet' Eclipse module is ready to be imported into your workspace. In Eclipse, go to "File -> Import... -> General -> Existing Projects into Workspace", select the your 'myportlet' directory, and follow the prompts.</p> + +<h2 id="DevelopingaPortletusingEclipse-Deployingyourportletasaservletdeploy_servlet">Deploying your portlet as a servlet <span class="confluence-anchor-link" id="DevelopingaPortletusingEclipse-deploy_servlet"></span></h2> + +<p>Since the Eclipse project was generated with the 'wtpversion' flag, it will be immediately recognized as a web application by Eclipse. If this is your first time deploying web applications in Eclipse, you will need set up your Tomcat server. To do this in Eclipse:</p> + +<ol><li>Navigate to "Window -> Show View -> Other..."</li><li>Open "Server" and select "Servers". This will open a "Servers" tab, probably in your bottom tab panel.</li><li>Right-click in the new "Servers" tab and select "New -> Server"</li><li>Select the version of Tomcat you installed and click "Next"</li><li>Click "Browse" and locate your Tomcat installation, and click "Next"</li><li>If "myportlet" isn't already in the "Configured projects" column, move it over and click "Finished"</li></ol> + + +<p>Before we can run our portlet in Eclipse, I've found that you need to add the portlet jar to Tomcat. To do this:</p> + +<ol><li>Right-click on the 'myportlet' project in the "Project Explorer" and select "Properties"</li><li>Click on "J2EE Module Dependencies</li><li>Click on the checkbox next to "M2_REPO/portlet-api/portlet-api/1.0/portlet-api-1.0.jar"</li><li>Click "OK"</li></ol> + + +<p>Now, you should be able to run and debug your project in Tomcat. The way I prefer to do this is to:</p> + +<ol><li>Right-click on the 'myportlet' project in the "Package Explorer" and select "Run As -> Run on Server"</li><li>Select the Tomcat server you set up and click "Finish"</li></ol> + + +<p>Eclipse will now run your portlet application as if it was a servlet.</p> + +<h2 id="DevelopingaPortletusingEclipse-AdditionalTipstips">Additional Tips <span class="confluence-anchor-link" id="DevelopingaPortletusingEclipse-tips"></span></h2> + +<ul><li>"View", "Edit", "Help" mode actions are mapped to the "/view", "/edit", "/help" namespaces respectively</li><li>The default action in each namespace is titled the "index" action</li><li>To add actions, just add the Action class and jsp following the shown conventions. No <code>struts.xml</code> modification needed.</li><li>Use the Eclipse option "Debug As..." instead of "Run As..." to enable step through debugging</li></ul></div> + </div> + + + </div> +</div> +<div class="footer"> + Generated by CXF SiteExporter +</div> +</body> +</html> http://git-wip-us.apache.org/repos/asf/struts-site/blob/124e36c4/content/docs/devmode.html ---------------------------------------------------------------------- diff --git a/content/docs/devmode.html b/content/docs/devmode.html new file mode 100644 index 0000000..9d52f6f --- /dev/null +++ b/content/docs/devmode.html @@ -0,0 +1,160 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> +<html> +<head> + <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css"> + <style type="text/css"> + .dp-highlighter { + width:95% !important; + } + </style> + <style type="text/css"> + .footer { + background-image: url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif'); + background-repeat: repeat-x; + background-position: left top; + padding-top: 4px; + color: #666; + } + </style> + <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' /> + <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' /> + <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script> + <script src='https://struts.apache.org/highlighter/js/shBrushCss.js' type='text/javascript'></script> + <script type="text/javascript"> + SyntaxHighlighter.defaults['toolbar'] = false; + SyntaxHighlighter.all(); + </script> + <script type="text/javascript" language="javascript"> + var hide = null; + var show = null; + var children = null; + + function init() { + /* Search form initialization */ + var form = document.forms['search']; + if (form != null) { + form.elements['domains'].value = location.hostname; + form.elements['sitesearch'].value = location.hostname; + } + + /* Children initialization */ + hide = document.getElementById('hide'); + show = document.getElementById('show'); + children = document.all != null ? + document.all['children'] : + document.getElementById('children'); + if (children != null) { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + } + + function showChildren() { + children.style.display = 'block'; + show.style.display = 'none'; + hide.style.display = 'inline'; + } + + function hideChildren() { + children.style.display = 'none'; + show.style.display = 'inline'; + hide.style.display = 'none'; + } + </script> + <title>devMode</title> +</head> +<body onload="init()"> +<table border="0" cellpadding="2" cellspacing="0" width="100%"> + <tr class="topBar"> + <td align="left" valign="middle" class="topBarDiv" align="left" nowrap> + <a href="home.html">Home</a> > <a href="guides.html">Guides</a> > <a href="core-developers-guide.html">Core Developers Guide</a> > <a href="devmode.html">devMode</a> + </td> + <td align="right" valign="middle" nowrap> + <form name="search" action="https://www.google.com/search" method="get"> + <input type="hidden" name="ie" value="UTF-8" /> + <input type="hidden" name="oe" value="UTF-8" /> + <input type="hidden" name="domains" value="" /> + <input type="hidden" name="sitesearch" value="" /> + <input type="text" name="q" maxlength="255" value="" /> + <input type="submit" name="btnG" value="Google Search" /> + </form> + </td> + </tr> +</table> + +<div id="PageContent"> + <div class="pageheader" style="padding: 6px 0px 0px 0px;"> + <!-- We'll enable this once we figure out how to access (and save) the logo resource --> + <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"--> + <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div> + <div style="margin: 0px 10px 8px 10px" class="pagetitle">devMode</div> + + <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;"> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=48688"> + <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=48688">Edit Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW"> + <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif" + height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a> + <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a> + + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=48688"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add Page"></a> + <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=48688">Add Page</a> + + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=48688"> + <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif" + height="16" width="16" border="0" align="absmiddle" title="Add News"></a> + <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=48688">Add News</a> + </div> + </div> + + <div class="pagecontent"> + <div class="wiki-content"> + <div id="ConfluenceContent"><h2 id="devMode-DevelopmentMode(aka"devMode")">Development Mode (aka "devMode")</h2><div class="confluence-information-macro confluence-information-macro-warning"><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Please turn this option off before deploying application to a production environment - it can expose sensitive data of your application!</p></div></div><p>Struts 2 has a setting (which can be set to <code style="line-height: 1.4285715;">true</code> or <code style="line-height: 1.4285715;">false</code> in <a shape="rect" href="strutsproperties.html">struts.properties</a>) called devMode (= development mode). When this setting is enabled, Struts 2 will provide additional logging and debug information, which can significantly speed up development.</p><div class="confluence-information-macro confluence-information-macro-tip"><span c lass="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>You can also set this constant in your struts.xml file: <code><constant name="struts.devMode" value="true" /></code>.</p><p>This is the preferred method. See <a shape="rect" href="constant-configuration.html">Constant Configuration</a> for more information.</p></div></div><h2 id="devMode-Whatdoesitdo?">What does it do?</h2><ul class="alternate"><li>When enabled, Struts 2 will reload your <strong>resource bundles on every request</strong> (meaning you can change your .properties files, save them, and see the changes reflected on the next request).<br clear="none"> Note: this option can also be set standalone via <code>struts.i18n.reload = true</code></li></ul><ul class="alternate"><li>It will also <strong>reload your xml configuration files</strong> (<a shape="rect" href="strutsxml.html">struts.xml</a>), your <strong>validation files</st rong>, and so on, on every request. This is useful for testing or fine-tuning your configuration without having to redeploy your application every time.<br clear="none"> Note: this option can also be set standalone via <code>struts.configuration.xml.reload = true</code></li></ul><ul class="alternate"><li>And thirdly, perhaps the setting which is less widely known, and therefore a source of much confusion: it will <strong>raise the level of debug or normally ignorable problems to errors</strong>. For example: when you <strong>submit a field which cannot be set on an action</strong> 'someUnknownField', it will normally be ignored. However, when you're in development mode, <strong>an exception will be thrown</strong>, telling you an invalid field was submitted. This is very useful for debugging or testing large forms, but can also be confusing if you're relying on parameters in your request that are not set on the action, but which you are using directly in your view layer (<strong>war ning</strong>: bad practice, you should always validate input from the web).</li></ul><h2 id="devMode-Don'tforget...">Don't forget...</h2><p>By default, the development mode is disabled, because it has a significant impact on <a shape="rect" href="performance-tuning.html">performance</a>, since the entire configuration will be reloaded on every request.</p><h2 id="devMode-Pagerenderingisslow">Page rendering is slow</h2><p>If you experience slow page rendering when <code>devMode</code> is on it's mostly because Freemarker cache is disabled during <code>devMode</code>. You can explicit enable cache and any other options disabled by <code>devMode</code>, see example below:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"><constant name="struts.devMode" value="true" /> +<constant name="struts.i18n.reload" value="false"/> +<constant name="struts.configuration.xml.reload" value="false"/> +<constant name="struts.freemarker.templatesCache" value="true"/> +<constant name="struts.freemarker.templatesCache.updateDelay" value="120"/> +<constant name="struts.freemarker.mru.max.strong.size" value="120"/> +</pre> +</div></div><p>As you can see, you can switch <code>devMode</code> on and still have production options on as well.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Please remember to use production optimized options which can be different than these used during development (especially cache related)!</p></div></div><h2 id="devMode-Next:">Next: <a shape="rect" href="zero-configuration.html">Zero Configuration</a></h2></div> + </div> + + + </div> +</div> +<div class="footer"> + Generated by CXF SiteExporter +</div> +</body> +</html>