<?xml version="1.0" encoding="UTF-8"?>
<document url="Struts.html">
<!--
    WARNING: This file is automatically generated from a jsdoc processor that
    turns javadoc-type comments of Javascript and special Java files into an xml file, which is
    then processed by an xsl file to create this document. Do not modify this
    file, but rather either modify the comments or xsl file.
  -->
<properties>
<title>Variable 'struts'</title>
</properties>
<body>
<section href="summary" name="Variable 'struts'">
<p>Access to Struts and Servlet resources</p>
<dl/>
<table width="100%">
<tr>
<th colspan="2">Function Summary</th>
</tr>
<tr>
<td width="5%">
<code>Map</code>
</td>
<td>
<strong>
<code>
<a href="#fn_getParam">getParam()</a>
</code>
</strong>
<dd>Gets a map of request parameters as Strings</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>Map</code>
</td>
<td>
<strong>
<code>
<a href="#fn_getParamValues">getParamValues()</a>
</code>
</strong>
<dd>Gets a map of request parameters as String arrays</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>Map</code>
</td>
<td>
<strong>
<code>
<a href="#fn_getRequestScope">getRequestScope()</a>
</code>
</strong>
<dd>Gets a map of request attributes</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>Map</code>
</td>
<td>
<strong>
<code>
<a href="#fn_getSessionScope">getSessionScope()</a>
</code>
</strong>
<dd>Gets a map of session attributes</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>Map</code>
</td>
<td>
<strong>
<code>
<a href="#fn_getApplicationScope">getApplicationScope()</a>
</code>
</strong>
<dd>Gets a map of application attributes</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>ServletRequest</code>
</td>
<td>
<strong>
<code>
<a href="#fn_getRequest">getRequest()</a>
</code>
</strong>
<dd>Gets the servlet request</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>ServletContext</code>
</td>
<td>
<strong>
<code>
<a href="#fn_getServletContext">getServletContext()</a>
</code>
</strong>
<dd>Gets the servlet context</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>String</code>
</td>
<td>
<strong>
<code>
<a href="#fn_getMessage">getMessage(java.lang.String key)</a>
</code>
</strong>
<dd>Gets an application resources message</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>ActionMapping</code>
</td>
<td>
<strong>
<code>
<a href="#fn_getMapping">getMapping()</a>
</code>
</strong>
<dd>Gets the action mapping</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>boolean</code>
</td>
<td>
<strong>
<code>
<a href="#fn_isCanceled">isCanceled()</a>
</code>
</strong>
<dd>Gets if the action has been canceled</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>boolean</code>
</td>
<td>
<strong>
<code>
<a href="#fn_isTokenValid">isTokenValid()</a>
</code>
</strong>
<dd>Gets if the current token is valid</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>void</code>
</td>
<td>
<strong>
<code>
<a href="#fn_resetToken">resetToken()</a>
</code>
</strong>
<dd>Resets the current transation token</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>void</code>
</td>
<td>
<strong>
<code>
<a href="#fn_saveErrors">saveErrors(org.apache.struts.action.ActionErrors errors)</a>
</code>
</strong>
<dd>Saves the action errors in the request</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>void</code>
</td>
<td>
<strong>
<code>
<a href="#fn_saveMessages">saveMessages(org.apache.struts.action.ActionMessages msgs)</a>
</code>
</strong>
<dd>Saves the action messages in the request</dd>
</td>
</tr>
<tr>
<td width="5%">
<code>void</code>
</td>
<td>
<strong>
<code>
<a href="#fn_saveToken">saveToken()</a>
</code>
</strong>
<dd>Saves a transaction token in the request</dd>
</td>
</tr>
</table>
</section>
<section name="Functions">
<section href="fn_getParam" name="getParam">
<pre>Map getParam()</pre>
<p>Gets a map of request parameters as Strings</p>
<dl/>
</section>
<section href="fn_getParamValues" name="getParamValues">
<pre>Map getParamValues()</pre>
<p>Gets a map of request parameters as String arrays</p>
<dl/>
</section>
<section href="fn_getRequestScope" name="getRequestScope">
<pre>Map getRequestScope()</pre>
<p>Gets a map of request attributes</p>
<dl/>
</section>
<section href="fn_getSessionScope" name="getSessionScope">
<pre>Map getSessionScope()</pre>
<p>Gets a map of session attributes</p>
<dl/>
</section>
<section href="fn_getApplicationScope" name="getApplicationScope">
<pre>Map getApplicationScope()</pre>
<p>Gets a map of application attributes</p>
<dl/>
</section>
<section href="fn_getRequest" name="getRequest">
<pre>ServletRequest getRequest()</pre>
<p>Gets the servlet request</p>
<dl/>
</section>
<section href="fn_getServletContext" name="getServletContext">
<pre>ServletContext getServletContext()</pre>
<p>Gets the servlet context</p>
<dl/>
</section>
<section href="fn_getMessage" name="getMessage">
<pre>String getMessage(java.lang.String key)</pre>
<p>Gets an application resources message</p>
<dl>
<dt>
<strong>Parameters:</strong>
</dt>
<dd>
<code>key</code> - 
                The message key</dd>
</dl>
<dl/>
</section>
<section href="fn_getMapping" name="getMapping">
<pre>ActionMapping getMapping()</pre>
<p>Gets the action mapping</p>
<dl/>
</section>
<section href="fn_isCanceled" name="isCanceled">
<pre>boolean isCanceled()</pre>
<p>Gets if the action has been canceled</p>
<dl/>
</section>
<section href="fn_isTokenValid" name="isTokenValid">
<pre>boolean isTokenValid()</pre>
<p>Gets if the current token is valid</p>
<dl/>
</section>
<section href="fn_resetToken" name="resetToken">
<pre>void resetToken()</pre>
<p>Resets the current transation token</p>
<dl/>
</section>
<section href="fn_saveErrors" name="saveErrors">
<pre>void saveErrors(org.apache.struts.action.ActionErrors errors)</pre>
<p>Saves the action errors in the request</p>
<dl>
<dt>
<strong>Parameters:</strong>
</dt>
<dd>
<code>errors</code> - 
                The action errors</dd>
</dl>
<dl/>
</section>
<section href="fn_saveMessages" name="saveMessages">
<pre>void saveMessages(org.apache.struts.action.ActionMessages msgs)</pre>
<p>Saves the action messages in the request</p>
<dl>
<dt>
<strong>Parameters:</strong>
</dt>
<dd>
<code>msgs</code> - 
                The action messages</dd>
</dl>
<dl/>
</section>
<section href="fn_saveToken" name="saveToken">
<pre>void saveToken()</pre>
<p>Saves a transaction token in the request</p>
<dl/>
</section>
</section>
</body>
</document>
