blob: 59ac6f588ecd5f3fdd64eea658b8f8547ad43b38 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="Date-Revision-yyyymmdd" content="20140918"/>
<meta http-equiv="Content-Language" content="en"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Action Proxy & ActionProxy Factory</title>
<link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
<link href="/css/main.css" rel="stylesheet">
<link href="/css/custom.css" rel="stylesheet">
<link href="/highlighter/github-theme.css" rel="stylesheet">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
<script type="text/javascript" src="/js/community.js"></script>
</head>
<body>
<a href="http://github.com/apache/struts" class="github-ribbon">
<img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
</a>
<header>
<nav>
<div role="navigation" class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
Menu
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
</div>
<div id="struts-menu" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="dropdown">
<a data-toggle="dropdown" href="#" class="dropdown-toggle">
Home<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/index.html">Welcome</a></li>
<li><a href="/download.cgi">Download</a></li>
<li><a href="/releases.html">Releases</a></li>
<li><a href="/announce-2021.html">Announcements</a></li>
<li><a href="http://www.apache.org/licenses/">License</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html">Thanks!</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
</ul>
</li>
<li class="dropdown">
<a data-toggle="dropdown" href="#" class="dropdown-toggle">
Support<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/mail.html">User Mailing List</a></li>
<li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
<li><a href="/security.html">Reporting Security Issues</a></li>
<li class="divider"></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/Migration+Guide">Version Notes</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/Security+Bulletins">Security Bulletins</a></li>
<li class="divider"></li>
<li><a href="/maven/project-info.html">Maven Project Info</a></li>
<li><a href="/maven/struts2-core/dependencies.html">Struts Core Dependencies</a></li>
<li><a href="/maven/struts2-plugins/modules.html">Plugin Dependencies</a></li>
</ul>
</li>
<li class="dropdown">
<a data-toggle="dropdown" href="#" class="dropdown-toggle">
Documentation<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/birdseye.html">Birds Eye</a></li>
<li><a href="/primer.html">Key Technologies</a></li>
<li><a href="/kickstart.html">Kickstart FAQ</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
<li class="divider"></li>
<li><a href="/getting-started/">Getting Started</a></li>
<li><a href="/security/">Security Guide</a></li>
<li><a href="/core-developers/">Core Developers Guide</a></li>
<li><a href="/tag-developers/">Tag Developers Guide</a></li>
<li><a href="/maven-archetypes/">Maven Archetypes</a></li>
<li><a href="/plugins/">Plugins</a></li>
<li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
<li><a href="/tag-developers/tag-reference.html">Tag reference</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/FAQs">FAQs</a></li>
<li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
</ul>
</li>
<li class="dropdown">
<a data-toggle="dropdown" href="#" class="dropdown-toggle">
Contributing<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/youatstruts.html">You at Struts</a></li>
<li><a href="/helping.html">How to Help FAQ</a></li>
<li><a href="/dev-mail.html">Development Lists</a></li>
<li><a href="/contributors/">Contributors Guide</a></li>
<li class="divider"></li>
<li><a href="/submitting-patches.html">Submitting patches</a></li>
<li><a href="/builds.html">Source Code and Builds</a></li>
<li><a href="/coding-standards.html">Coding standards</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/Contributors+Guide">Contributors Guide</a></li>
<li class="divider"></li>
<li><a href="/release-guidelines.html">Release Guidelines</a></li>
<li><a href="/bylaws.html">PMC Charter</a></li>
<li><a href="/volunteers.html">Volunteers</a></li>
<li><a href="https://gitbox.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
<li><a href="/updating-website.html">Updating the website</a></li>
</ul>
</li>
<li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
</ul>
</div>
</div>
</div>
</nav>
</header>
<article class="container">
<section class="col-md-12">
<a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/core-developers/action-proxy-and-actionproxy-factory.md" title="Edit this page on GitHub">Edit on GitHub</a>
<a href="index.html" title="back to Core Developers Guide"><< back to Core Developers Guide</a>
<h1 class="no_toc" id="action-proxy--actionproxy-factory">Action Proxy &amp; ActionProxy Factory</h1>
<ul id="markdown-toc">
<li><a href="#customization" id="markdown-toc-customization">Customization</a> <ul>
<li><a href="#actionproxyfactory" id="markdown-toc-actionproxyfactory">ActionProxyFactory</a></li>
<li><a href="#actionproxy" id="markdown-toc-actionproxy">ActionProxy</a></li>
<li><a href="#actioninvocation" id="markdown-toc-actioninvocation">ActionInvocation</a></li>
</ul>
</li>
</ul>
<p>The ActionProxy obtains the Action class and calls the appropriate method. By default, Actions are obtained through
local instantiation, but an Action could also be obtained remotely if an alternative ActionProxy were provided.</p>
<p>An alternative ActionProxy can be configured through ActionProxyFactory. Typically, an ActionProxy will utilize
the ActionInvocation to encapsulate the execution of a particular request.</p>
<p>The ActionInvocation determines how an Action is handled: Is it being intercepted? Is there a PreResultListener
acting on it?</p>
<p>Essentially, ActionProxy encapsulates how an Action can be obtained. ActionInvocation encapsulates how the Action
s executed when a request is invoked.</p>
<h2 id="customization">Customization</h2>
<h3 id="actionproxyfactory">ActionProxyFactory</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">ActionProxyFactory</span><span class="o">.</span><span class="na">setFactory</span><span class="o">(</span><span class="k">new</span> <span class="n">MyActionProxyFactory</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// Do something interesting...</span>
<span class="o">});</span>
</code></pre></div></div>
<h3 id="actionproxy">ActionProxy</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">ActionProxyFactory</span><span class="o">.</span><span class="na">getFactory</span><span class="o">(</span><span class="k">new</span> <span class="n">MyActionProxyFactory</span><span class="o">()</span> <span class="o">{</span>
<span class="o">....</span>
<span class="kd">public</span> <span class="n">ActionProxy</span> <span class="nf">createActionProxy</span><span class="o">(</span><span class="n">Configuration</span> <span class="n">config</span><span class="o">,</span>
<span class="n">String</span> <span class="n">namespace</span><span class="o">,</span> <span class="n">String</span> <span class="n">actionName</span><span class="o">,</span> <span class="n">Map</span> <span class="n">extraContext</span><span class="o">)</span>
<span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
<span class="n">createActionProxy</span><span class="o">(</span><span class="n">config</span><span class="o">,</span> <span class="n">namespace</span><span class="o">,</span> <span class="n">actionName</span><span class="o">,</span> <span class="n">extraContext</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="n">ActionProxy</span> <span class="nf">createActionProxy</span><span class="o">(</span><span class="n">Configuration</span> <span class="n">config</span><span class="o">,</span>
<span class="n">String</span> <span class="n">namespace</span><span class="o">,</span> <span class="n">String</span> <span class="n">actionName</span><span class="o">,</span> <span class="n">Map</span> <span class="n">extraContext</span><span class="o">,</span>
<span class="kt">boolean</span> <span class="n">executeResult</span><span class="o">,</span> <span class="kt">boolean</span> <span class="n">cleanupContext</span><span class="o">)</span>
<span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
<span class="o">....</span>
<span class="o">}</span>
<span class="o">....</span>
<span class="o">});</span>
</code></pre></div></div>
<h3 id="actioninvocation">ActionInvocation</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">ActionProxyFactory</span><span class="o">.</span><span class="na">getFactory</span><span class="o">(</span><span class="k">new</span> <span class="n">MyActionProxyFactory</span><span class="o">()</span> <span class="o">{</span>
<span class="o">...</span>
<span class="kd">public</span> <span class="n">ActionInvocation</span> <span class="nf">createActionInvocation</span><span class="o">(</span><span class="n">ActionProxy</span> <span class="n">actionProxy</span><span class="o">)</span>
<span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
<span class="n">createActionInvocation</span><span class="o">(</span><span class="n">actionProxy</span><span class="o">,</span> <span class="k">new</span> <span class="n">LinkedHashMap</span><span class="o">());</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="n">ActionInvocation</span> <span class="nf">createActionInvocation</span><span class="o">(</span><span class="n">ActionProxy</span> <span class="n">actionProxy</span><span class="o">,</span>
<span class="n">Map</span> <span class="n">extraContext</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
<span class="n">createActionInvocation</span><span class="o">(</span><span class="n">actionProxy</span><span class="o">,</span> <span class="n">extraContext</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="n">ActionInvocation</span> <span class="nf">createActionInvocation</span><span class="o">(</span><span class="n">ActionProxy</span> <span class="n">actionProxy</span><span class="o">,</span>
<span class="n">Map</span> <span class="n">extraContext</span><span class="o">,</span> <span class="kt">boolean</span> <span class="n">pushAction</span><span class="o">)</span>
<span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
<span class="c1">// Do implementation of ActionInvocation here</span>
<span class="o">.....</span>
<span class="o">}</span>
<span class="o">...</span>
<span class="o">});</span>
</code></pre></div></div>
</section>
</article>
<footer class="container">
<div class="col-md-12">
Copyright &copy; 2000-2018 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
All Rights Reserved.
</div>
<div class="col-md-12">
Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
trademarks of The Apache Software Foundation.
</div>
<div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
</footer>
<script>!function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (!d.getElementById(id)) {
js = d.createElement(s);
js.id = id;
js.src = "//platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
}
}(document, "script", "twitter-wjs");</script>
<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
<div id="fb-root"></div>
<script>(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
</body>
</html>