You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@portals.apache.org by at...@apache.org on 2012/12/16 19:11:09 UTC

svn commit: r1422646 [3/6] - in /portals/site-live/bridges: ./ bridges-common/ bridges-frameworks/ bridges-groovy/ bridges-jsf/ bridges-perl/ bridges-php/ bridges-portletfilter/ bridges-script/ bridges-struts/ bridges-velocity/ css/ images/ images/logos/

Added: portals/site-live/bridges/bridges-struts/features.html
URL: http://svn.apache.org/viewvc/portals/site-live/bridges/bridges-struts/features.html?rev=1422646&view=auto
==============================================================================
--- portals/site-live/bridges/bridges-struts/features.html (added)
+++ portals/site-live/bridges/bridges-struts/features.html Sun Dec 16 18:11:05 2012
@@ -0,0 +1,690 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+
+
+
+
+
+
+
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>Apache Portals Bridges - Struts Bridge Features</title>
+    <style type="text/css" media="all">
+      @import url("../css/maven-base.css");
+      @import url("../css/maven-theme.css");
+      @import url("../css/site.css");
+    </style>
+    <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
+        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+      </head>
+  <body class="composite">
+    <div id="banner">
+                  <a href="http://portals.apache.org/" id="bannerLeft">
+    
+                                            <img src="../images/apache-portals.gif" alt="" />
+    
+            </a>
+                        <a href="http://portals.apache.org/bridges/" id="bannerRight">
+    
+            Apache Portals Bridges
+    
+            </a>
+            <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="breadcrumbs">
+          
+  
+
+  
+    
+  
+  
+    
+            <div class="xleft">
+        Last Published: 29 September 2011
+                      </div>
+            <div class="xright">            <a href="http://portals.apache.org/" class="externalLink">Portals</a>
+            |
+                <a href="http://portals.apache.org/applications" class="externalLink">Applications</a>
+            |
+                <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2</a>
+            |
+                <a href="http://www.jcp.org/en/jsr/detail?id=168" class="externalLink">JSR-168</a>
+            |
+                <a href="http://www.jcp.org/en/jsr/detail?id=286" class="externalLink">JSR-286</a>
+            
+  
+
+  
+    
+  
+  
+    
+  </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="leftColumn">
+      <div id="navcolumn">
+           
+  
+
+  
+    
+  
+  
+    
+                   <h5>Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../index.html">Overview</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../news.html">News and Status</a>
+          </li>
+          </ul>
+              <h5>Current Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../bridges-common/index.html">Common Utilities and Interfaces</a>
+          </li>
+              
+                
+              
+            
+              
+            <li class="expanded">
+                    <a href="../bridges-struts/index.html">Struts Bridge</a>
+                  <ul>
+                  
+    <li class="none">
+              <strong>Features</strong>
+        </li>
+              </ul>
+        </li>
+              
+    <li class="none">
+                    <a href="../bridges-velocity/index.html">Velocity Bridge</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../bridges-script/index.html">Script Bridge</a>
+          </li>
+              
+                
+              
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="../bridges-groovy/index.html">Groovy Bridge</a>
+                </li>
+          </ul>
+              <h5>Archived Portals Bridges</h5>
+            <ul>
+              
+                
+              
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="../bridges-jsf/index.html">JSF Bridge</a>
+                </li>
+              
+                
+              
+      
+            
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="../bridges-php/index.html">PHP Bridge</a>
+                </li>
+              
+    <li class="none">
+                    <a href="../bridges-perl/index.html">Perl Bridge</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../bridges-portletfilter/index.html">Portlet Filter</a>
+          </li>
+          </ul>
+              <h5>Get Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../download.html">Download</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../release-notes.html">Release Notes</a>
+          </li>
+          </ul>
+              <h5>Support</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../team-list.html">Project Team</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../license.html">Project License</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../mail-lists.html">Mailing List</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../issue-tracking.html">Issue Tracking</a>
+          </li>
+          </ul>
+                                           <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
+            <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img>
+          </a>
+                       
+  
+
+  
+    
+  
+  
+    
+        </div>
+    </div>
+    <div id="bodyColumn">
+      <div id="contentBox">
+        <subtitle></subtitle><authors><person name="Ate Douma" email="ate@douma.nu"></authors><div class="section"><h2><a name="Features"></a>Features</h2>
+<p>
+        The Struts Bridge provides the following features for developing and running Struts Applications as Portlets:
+        <ul><li><a href="#Struts Page URL">
+              Provides a &quot;virtual&quot; page context and a &quot;normal&quot; page url to the Struts Application
+            </a></li>
+<li><a href="#The ServletContextProvider interface">
+              Allows Servlet invocation from an ActionRequest using an separate lightweight interface to the Portal
+            </a></li>
+<li><a href="#Portals requiring a more complex interface">
+              Provides extension points if a more complex interface to the Portal is required
+            </a></li>
+<li><a href="#Handling ActionRequests">
+              Automatically separates Struts Action Processing and View Rendering when accessed from an ActionRequest
+            </a></li>
+<li><a href="#RenderContextAttributes to the rescue">
+              Transparent communication of request attributes between ActionRequest and RenderRequests
+            </a></li>
+<li><a href="#Rendering valid Portlet urls with the Struts JSP Tags">
+              Transparent translation of &quot;normal&quot; Web application resource and action link urls to valid Portlet urls
+            </a></li>
+<li><a href="#PortletRequestProcessor and PortletTilesRequestProcessor">
+              Tiles support and automatic configuration of the correct (Portlet)RequestProcessor (enhanced for 1.0.1)
+            </a></li>
+<li><a href="#Running your application as Portlet and Web Application at the same time">
+              Deploy and run Struts Applications as Portlet and as Web Application at the same time
+            </a></li>
+<li><a href="#1.0.1: Multiple StrutsPortlet instances PORTLET_SCOPE isolated StrutsServlet sessions">
+              1.0.1: Multiple StrutsPortlet instances with the StrutsServlet session isolated to PORTLET_SCOPE
+            </a></li>
+<li>
+            Supports Struts release 1.2.7
+          </li>
+</ul>
+</p>
+<div class="section"><h3><a name="Struts_Page_URL"></a>Struts Page URL</h3>
+<p>
+          Struts determines the Actions to perform on the request url. A Portlet on the other hand doesn't
+          have or receive an url, only request parameters.
+        </p>
+<p>
+          To be able to use Struts within a Portlet, a current Page context is maintained by the Struts Bridge
+          which is used to provide Struts with a &quot;virtual&quot; request context just as if it were accessed from a Web
+          Application.
+        </p>
+<p>
+          The Struts Page URL is maintained as a Portlet <code>RenderParameter</code> and included in all Portlet URLs
+          generated for the Portlet. When the <code>StrutsPortlet</code> receives a request it uses the Struts Page URL
+          to create a new <code>HttpServletRequest</code> with a redefined request url before invoking the Struts
+          <code>PortletServlet</code> (extending the Struts <code>ActionServlet</code>). 
+        </p>
+<p>
+          None of the Action Mappings for an existing Struts Application have to be changed (in this respect at least)
+          to allow it to run in a Portlet context. 
+        </p>
+</div>
+<div class="section"><h3><a name="The_ServletContextProvider_interface"></a>The ServletContextProvider interface</h3>
+<p>
+          Processing <code>ActionRequest</code> and <code>RenderRequest</code> events from a Servlet application is a
+          problem with the current Portlet Specification. Although Servlets (and JSPs) can be invoked from a Portlet,
+          the Portlet Specification only supports this from the <code>RenderRequest</code>.
+        </p>
+<p>
+          As request parameters are only available during the <code>ActionRequest</code>, not being able to use a Struts
+          for processing these is a serious limitation. Together with no clear inter-portlet application communication
+          support, this is probably one of the biggest omissions from the Portlet Specification.
+        </p>
+<p>
+          But, because the Portlet Specification is build upon the Servlet Specification (2.3), the Portlet Container
+          implementation (like <a href="http://portals.apache.org/pluto" class="externalLink">Pluto</a>) and/or the Portal itself, usually
+          has direct access to, and also uses the <code>ServletContext</code>, even during the
+          <code>ActionRequest</code> event.           
+        </p>
+<p>
+          It is therefore usually quite easy to provide access to the <code>ServletContext</code>, although it will
+          require some knowledge of the Portal and/or the Portlet Container implementation.
+        </p>
+<p>
+          The Struts Bridge uses the <code>ServletContextProvider</code> interface from the
+          portals-bridges-common library to get access to the required <code>ServletContext</code>.
+       </p>
+<p>
+          To be able to use the Struts Bridge, a <code>StrutsPortlet</code> must therefore be provided with a concrete
+          implementation of the <code>ServletContextProvider</code> interface (through its initialization parameters).
+          This implementation class can be supplied together with the Portlet or be provided natively by the Portal as
+          the <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2</a> Portal does. 
+        </p>
+</div>
+<div class="section"><h3><a name="Portals_requiring_a_more_complex_interface"></a>Portals requiring a more complex interface</h3>
+<p>
+          Although the <code>ServletContextProvider</code> interface has been defined to be easily implemented for a
+          specific Portal, it might not be generic enough for all.
+        </p>
+<p>
+          To support those kind of Portals, the <code>StrutsPortlet</code> doesn't uses the interface directly, but only
+          through protected methods of its own which can be extended if needed.
+        </p>
+</div>
+<div class="section"><h3><a name="Handling_ActionRequests"></a>Handling ActionRequests</h3>
+<p>
+          During an <code>ActionRequest</code> a Portlet (or invoked Servlet) is not allowed to write content to the
+          response. This is only allowed during the <code>RenderRequest</code> event but then a Portlet doesn't have
+          access anymore to the (input) request parameters which makes the RenderRequest generally useless (and bad
+          practice anyway) for (Struts) Action processing.
+        </p>
+<p>
+          Struts on the other hand only knows one request event and is largely build upon server-side forwarding to a
+          JSP (or other View rendering technology) after an Action has been processed.
+        </p>
+<p>
+          The Struts Bridge solves this problem by allowing Struts Action processing to occur during the ActionRequest.
+          But, as soon as Struts forwards (or includes) to another handler (JSP, Velocity script, <em>or even another
+          Action: ActionChaining</em>) it will intercept and freeze the processing.<br />
+
+          The Struts Bridge will then save the current processing context (like the path to include or forward to) in a
+          separate object: the <code>StrutsRenderContext</code>, and end the ActionRequest.<br />
+
+          Once the RenderRequest is invoked, the Struts Bridge will use the <code>StrutsRenderContext</code> to restore
+          the state Struts (and/or an included or forwarded JSP) will expect and continues the processing where it left
+          off.
+        </p>
+<p>
+          Also saved in the StrutsRenderContext are the current <code>ActionForm</code> (if it isn't already session
+          bounded), the <code>ActionMessages</code> and/or <code>ActionErrors</code> (if not already session bounded
+          which is possible since Struts 1.2.1).
+        </p>
+<p><b><em>Important:</em></b> the StrutsRenderContext is restored only once!
+        </p>
+<p>
+          The Portlet Specification expects Portlets to use a true MVC architecture: changing the state of a Portlet is
+          expected to be done during ActionRequest only. The RenderRequest, which may occur many times, is expected to
+          only render the current state of the Portlet.
+        </p>
+<p>
+          For a proper usage of the Struts Bridge and to conform to the Portlet Specification requirements, the Struts
+          application too really should be configured to use separate Action processing and View rendering Actions.<br />
+</p>
+<p>
+          The dependency on the StrutsRenderContext restoring the state during the (next) RenderRequest should be
+          limited to one situation only: input error processing.
+        </p>
+<p>
+          When Struts encounters input validation errors, it forwards (back) to the page specified as input for the
+          Action. The Struts Bridge handles this situation likewise. When it detects ActionErrors are defined after the
+          ActionRequest event, it will reset the Struts Page URL to the one from which the ActionRequest was initiated
+          so subsequent (multiple) RenderRequest events will always render that original page.
+        </p>
+<p>
+          Note: this will only result the same behavior as when the Struts Application is accessed as Web Application if
+          the Action Mapping input attribute indeed points to the originating input page, which normally will be the
+          case. <em>The Struts Bridge will not (re)set the Struts Page URL to the Action input attribute value (Struts
+          itself will forward to that url) but to the page from which the ActionRequest was initiated!</em></p>
+<p>
+          As said, for a proper usage of the Struts Bridge the Struts application should be configured to use separate
+          Action processing and View processing Actions. The Struts Bridge intercepts the first include or forward 
+          initiated from a Struts Action during the ActionRequest. During only the first following RenderRequest it will
+          invoke Struts with <em>the same Struts Page URL</em> as for the ActionRequest but intercept before the actual
+          execution of the mapped Action and then include (never forward) the intercepted target url of the ActionRequest
+          (normally a JSP).          
+        </p>
+<p>
+          A properly MVC configured Struts application though can (and should) make use of a (client-side) redirect
+          after the Action processing Action by using an ActionForward with redirect=&quot;true&quot;. The behavior of such a
+          Struts Application then truly complies to the requirements for a Portlet. In fact, the reference
+          implementation of the Portlet Specification, <a href="http://portals.apache.org/pluto" class="externalLink">Pluto</a>, actually
+          sends a redirect to the client (browser) after an ActionRequest.
+        </p>
+<p>
+          The Struts Bridge supports this behavior as it will intercept a client-side redirect during an ActionRequest
+          by changing the Portlet Page URL to be used by subsequent RenderRequests to the targeted redirect url.
+        </p>
+<p>
+          A Struts Application not complying to the above &quot;rules&quot; might not behave as expected in a Portlet context:<br />
+
+          without this configuration a second RenderRequest event will not get the previously saved StrutsRenderContext
+          restored and the invoked Struts Action will be executed again (this time without any parameters).
+        </p>
+<p>
+          Migrating an existing Struts Application to a Struts Portlet with doesn't comply to these &quot;rules&quot; might seem
+          problematic without major changes to the code, but it doesn't have to be. 
+        </p>
+</div>
+<div class="section"><h3><a name="RenderContextAttributes_to_the_rescue"></a>RenderContextAttributes to the rescue</h3>
+<p>
+          Although a StrutsRenderContext can only be used once to communicate request parameters from the ActionRequest
+          to the next RenderRequest (stored in the ActionForm), the Struts Bridge provides another, completely
+          transparent, solution which can be used without any required changes to the Struts Application.
+        </p>
+<p>
+          The Struts Bridge can be configured, using a simple xml definition, to always save specific named request
+          attributes during an ActionRequest and restore these only during the next RenderRequest or optionally every
+          RenderRequest until the next ActionRequest or a RenderRequest for a different Struts Page URL is invoked.
+        </p>
+<p>
+          The request attribute values will be saved in the web session which requires them to implement the
+          <code>Serializable</code> interface.
+        </p>
+<p>
+          An example struts-portlet-config.xml (the name of this file is configurable) definition might look like:
+          <div class="source"><pre>
+            &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+            &lt;config&gt;
+              &lt;render-context&gt;
+                &lt;attribute name=&quot;errors&quot;/&gt;
+                &lt;attribute name=&quot;message&quot; keep=&quot;true&quot;/&gt;
+                &lt;attribute prefix=&quot;com.foo.bar&quot; keep=&quot;true&quot;/&gt;
+              &lt;/render-context&gt;
+            &lt;/config&gt;</pre>
+</div>
+<em>(This (adapted) example is taken from the JPetstore Portlet example provided with the
+          <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2</a> Portal.)</em></p>
+<p>
+          With the above example configuration, all request attributes named <em>errors</em> and <em>message</em> are
+          saved after the ActionRequest. The <em>errors</em> object is restored only once, the <em>message</em> object
+          will be restored until the next ActionRequest or when the Struts Page URL is changed. 
+        </p>
+<p>
+          Furthermore, every request attribute which name start with <em>com.foo.bar</em> is also saved after the ActionRequest.
+          With the &quot;prefix&quot; attribute type definition, a whole range of attributes can be configured at once.
+        </p>
+<p>
+          Using the RenderContextAttributes configuration, a Struts Action can still forward (without redirecting) to a
+          JSP in a Portlet while passing its required data through the request attributes. Request scoped ActionForms
+          can also safely be used for this as the Struts Bridge will automatically remove them from the session again
+          when they go out of scope!      
+        </p>
+<p>
+          Using the &quot;single use only&quot; configuration (meaning: without the keep=&quot;true&quot; attribute) allows one to pass on rather large
+          objects to the RenderRequest because, even if they are stored in the Session, this will only be for a very
+          short period (milliseconds). Of course, with a subsequent RenderRequest these objects won't be available
+          anymore and the specific View Renderer must be able to handle that situation properly.<br />
+
+          Error objects or error messages (other than ActionMessages and ActionErrors which are already automatically
+          saved in the StrutsRenderContext) are also reasonable candidates to use like this.
+        </p>
+</div>
+<div class="section"><h3><a name="Rendering_valid_Portlet_urls_with_the_Struts_JSP_Tags"></a>Rendering valid Portlet urls with the Struts JSP Tags</h3>
+<p>
+          Another problem with using Struts for Portlet Development is rendering valid urls.
+        </p>
+<p>
+          There are actually two different type of problems: urls for resources likes images, Javascript or CSS
+          stylesheets which needs to be loaded by the client (browser), and urls for interacting with the Portlet
+          itself.
+        </p>
+<p>
+          The problem with resource urls is that the content of a Portlet is only included by the Portal,
+          together with possible content of other Portlets shown on the same page. Although the Portlet runs within
+          its own context (the same as the web application it is based on), the client (browser) sees only the context
+          of the Portal page it is currently pointed at.
+        </p>
+<p>
+          A Portlet therefore cannot make use of relative src locations for a resource url while this is perfectly valid
+          (and usually preferred) in a Web Application. For a client to be able to retrieve a resource, its url
+          really must include the full context path of the Web Application.
+        </p>
+<p>
+          For interacting with the Portlet special PortletURLs must be used which can only be generated using the
+          Portlet API or through the Portlet JSP Tags. The Struts JSP Tags only generate urls valid for a Web
+          Application and also doesn't provide some kind of URLProvider interface like JSF.
+        </p>
+<p>
+          Furthermore there are two different PortletURL types: ActionURLs and RenderURLs.
+          It is very important to generate the correct type of url for a certain interaction. Forms must *always* use
+          a POST to an ActionURL, but for generated links it will have to be determined which type of url actually
+          is needed. 
+        </p>
+<p>
+          To solve these problems, the Struts Bridge provides enhanced versions of the Struts HTML JSP Tags (including
+          EL variants), which take the Portlet environment into account. Furthermore, using a separate element in
+          the struts-portlet-config.xml definition, specific url paths can be configured to be of a certain type
+          (Resource, ActionURL, RenderURL) only.
+        </p>
+<p>
+          For the enhanced Struts HTML JSP Tags (html:form, html:link, html:rewrite, html:image and html:img), four
+          different TLDs are provided: an EL and non-EL variant, and for both a full replacement of the Struts
+          supplied struts-html.tld as well as a separate struts-portlet.tld containing only the enhanced Tags definitions.  
+        </p>
+<p>
+          The full replacement TLDs makes it very easy for migrating a Struts Application to a Portlet context: simply
+          map the new TLD in web.xml or redefine the taglib uri in the JSP using:
+          <div class="source"><pre>
+            &lt;%@ taglib uri=&quot;http://portals.apache.org/bridges/struts/tags-portlet-html&quot; prefix=&quot;html&quot; %&gt;</pre>
+</div>
+
+          or
+          <div class="source"><pre>
+            &lt;%@ taglib uri=&quot;http://portals.apache.org/bridges/struts/tags-portlet-html-el&quot; prefix=&quot;html-el&quot; %&gt;</pre>
+</div>
+<em>(Note: the Struts Bridge library contains all the TLDs so you don't need to add them yourself 
+            somewhere under WEB-INF/.)</em></p>
+<p>
+          For the enhanced html:link and html:rewrite Tags, three additional boolean attributes are defined: actionURL,
+          renderURL and resourceURL. Using these attributes one can specify which type of url must be generated (only
+          value &quot;true&quot; is supported).
+        </p>
+<p>
+          If none of these attributes is specified (with value &quot;true&quot;) these Tags will by default generate a RenderURL.          
+        </p>
+<p>
+          But, the default can be changed (only between renderURL and actionURL) using a struts-portlet-config.xml
+          definition. Furthermore, for specific url path (prefixes) you can specify which type of url must be generated
+          (but with one of the three additional boolean url type attributes this can always be overriden).
+        </p>
+<p>
+          An example struts-portlet-config.xml with portlet url type definitions might look like:
+          <div class="source"><pre>
+            &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+            &lt;config&gt;
+              &lt;render-context&gt;
+                &lt;attribute name=&quot;errors&quot;/&gt;
+                &lt;attribute name=&quot;message&quot; keep=&quot;true&quot;/&gt;
+              &lt;/render-context&gt;
+              &lt;portlet-url-type&gt;
+                &lt;action path=&quot;/shop/add&quot;/&gt;
+                &lt;action path=&quot;/shop/switch&quot;/&gt;
+                &lt;action path=&quot;/shop/remove&quot;/&gt;
+                &lt;action path=&quot;/shop/signoff&quot;/&gt;
+                &lt;action path=&quot;/shop/viewCategory&quot;/&gt;
+                &lt;action path=&quot;/shop/viewItem&quot;/&gt;
+                &lt;action path=&quot;/shop/viewProduct&quot;/&gt;
+                &lt;action path=&quot;/shop/viewCart&quot;/&gt;
+                &lt;action path=&quot;/shop/newOrder&quot;/&gt;
+                &lt;render path=&quot;/shop/newOrderForm&quot;/&gt;
+                &lt;action path=&quot;/shop/listOrders&quot;/&gt;
+                &lt;resource path=&quot;/images/&quot;/&gt;
+              &lt;/portlet-url-type&gt;
+            &lt;/config&gt;</pre>
+</div>
+<em>(This is the full configuration used for the JPetstore Portlet example provided with the
+          <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2</a> Portal.)</em></p>
+<p>
+          In the above example the portlet-url-type element contains three different sub elements: action, render and
+          resource. Their path attribute specifies the prefix to which specific urls are matched. This matching will be
+          done using best match. Internally, the paths will be ordered on longest definition first.
+        </p>
+<p>
+          Not shown in the above example is the optional default=&quot;render&quot;|&quot;action&quot; attribute for the portlet-url-type
+          element. With it, the default type of portlet-url can be changed from &quot;render&quot; to &quot;action&quot; as is used in the
+          Struts Mailreader Demo Portlet (also provided by the <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2</a>
+          Portal):
+          <div class="source"><pre>
+            &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+            &lt;config&gt;
+              &lt;portlet-url-type default=&quot;action&quot;/&gt;
+            &lt;/config&gt;</pre>
+</div>
+
+            This feature is especially useful for Struts Applications who were configured using an earlier version of
+            the Struts Bridge (0.1) which used an ActionURL as default, like the above Struts Mailreader Demo Portlet.
+        </p>
+<p>
+          The enhanced html:img and html:image Tags, as well as the html:link and html:rewrite Tags, can be used to
+          generate resource urls using relative (not prefixed with a '/') src references. The Tags will then
+          automatically determine the correct url to generate using the current Struts Page URL as defined for this
+          RenderRequest.
+        </p>
+<p>
+          This allows one to replace hard coded resource urls like 
+          <div class="source"><pre>&lt;img src=&quot;../images/struts-bridge.gif&quot;/&gt;</pre>
+</div>
+
+          with  
+          <div class="source"><pre>&lt;html:image src=&quot;../images/struts-bridge.gif&quot;/&gt;</pre>
+</div>
+
+          A simple change with no technical impact, but it will allow the same JSP to be used for both a Web Application
+          and a Portlet. The JPetstore Portlet example as provided by <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2</a>
+          makes full use of this feature.
+        </p>
+</div>
+<div class="section"><h3><a name="PortletRequestProcessor_and_PortletTilesRequestProcessor"></a>PortletRequestProcessor and PortletTilesRequestProcessor</h3>
+<p>
+          The Struts Bridge requires a different RequestProcessor to be used for the Struts Application: a <code>
+          PortletRequestProcessor</code>. If a Struts config doesn't define one, or defines one which isn't based on the
+          PortletRequestProcessor, it will be replaced automatically by the Struts Bridge.
+        </p>
+<p>
+          The Struts Bridge also supports Tiles to be used with the <code>PortletTilesRequestProcessor</code>. If the
+          TilesPlugin is defined (as required to be able to use Tiles in Struts) it will be recognized by the Struts
+          Bridge and then the PortletTilesRequestProcessor will be used instead (if not configured already).          
+        </p>
+<p>
+          Tiles can be used without problem within a Portlet context, even for Action Mapping or ActionForward paths,
+          although the same considerations and restrictions must be taken into account as described above.
+        </p>
+<p>
+          1.0.1: For proper handling of the Tiles Context, with version 1.0 the Tiles ComponentConstants.COMPONENT_CONTEXT had to be
+          set as RenderContextAttribute like this:
+          <div class="source"><pre>
+            &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+            &lt;config&gt;
+              &lt;render-context&gt;
+                &lt;attribute name=&quot;org.apache.struts.taglib.tiles.CompContext&quot;/&gt;
+                ...
+              &lt;/render-context&gt;
+              ...
+            &lt;/config&gt;</pre>
+</div>
+
+            With the 1.0.1 release, this isn't necessary anymore as the Struts Bridge will register this special attribute
+            itself automatically if it hasn't been defined in the struts-portlet-config.xml already.
+        </p>
+</div>
+<div class="section"><h3><a name="Running_your_application_as_Portlet_and_Web_Application_at_the_same_time"></a>Running your application as Portlet and Web Application at the same time</h3>
+<p>
+          Although the Struts Bridge is created to allow Struts Applications to run in a Portlet context, it also allows
+          the same application to be run in a Servlet context too.
+        </p>
+<p>
+          If the Struts Bridge PortletServlet (which extends ActionServlet) detects it is not accessed from a Portlet
+          context is simply delegates back to the underlying Struts Framework.
+        </p>
+<p>
+          Provided the Struts Application doesn't use any Portlet specific features and the Action Mapping configuration
+          is also (still) valid for a Web Application, the same application war can be deployed as Web application and
+          as Portlet Application. When deployed in a Portal, the application can even be accessed as Portlet or as 
+          Web Application at the same time!
+        </p>
+<p>
+          The JPetstore Portlet example provided by <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2</a> is one
+          example of such a &quot;dual&quot; mode Struts Application.
+        </p>
+<p>
+          Another benefit of such a &quot;dual&quot; mode Struts Application is that it can be tested as Web Application 
+          which <em>is</em> somewhat easier than testing it as a Portlet.
+        </p>
+</div>
+<div class="section"><h3><a name="a1.0.1:_Multiple_StrutsPortlet_instances_PORTLET_SCOPE_isolated_StrutsServlet_sessions"></a>1.0.1: Multiple StrutsPortlet instances PORTLET_SCOPE isolated StrutsServlet sessions</h3>
+<p>
+          The Struts framework itself, as well as many Struts applications make have use of the (Servlet) Session for storing user state.
+          When you want to use multiple StrutsPortlets from the same web application this can cause conflicts and session state corruption.
+          With Struts Bridge release 1.0.1, this now has been solved by (optionally, and not by default) isolating the Session scope
+          seen by the StrutsServlet to PortletSession.PORTLET_SCOPE. 
+        </p>
+<p>
+          If the optional StrutsPortlet init parameter <code>PortletScopeStrutsSession</code> is set to true, the Session object provided to the
+          StrutsServlet will be a Proxy for the PortletSession and will provide only access to the PortletSession.PORTLET_SCOPE attributes.
+        </p>
+<p>
+          One caveat though: If you also need to use direct Servlet access to the Struts application (meaning: the browser is invoking the
+          Servlet directly, not through the Portlet), this Servlet won't &quot;see&quot; the previously APPLICATION_SCOPE Session attributes anymore.<br />
+
+          This can be an issue for features like binary file (pdf) rendering through a servlet which needs to use the Session to access its data.
+          To solve this, the utility 
+          <a href="../portals-bridges-common/apidocs/org/apache/portals/bridges/util/PortletWindowUtils.html">PortletWindowUtils</a> class can
+          be used which provides methods to access a specific Portlet instance its PORTLET_SCOPE session attributes based on its PortletWindowId.<br />
+
+          That PortletWindowId (which a Portlet can retrieve itself using the PortletWindowUtils) needs to be passed on to the Servlet first
+          (for example as query-string parameter on a link send to the browser) for it to be able to make use of it.
+        </p>
+</div>
+</div>
+
+      </div>
+    </div>
+    <div class="clear">
+      <hr/>
+    </div>
+    <div id="footer">
+      <div class="xright">&#169;  
+          2004-2011
+    
+          Apache Software Foundation
+          
+  
+
+  
+    
+  
+  
+    
+  </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+  </body>
+</html>

Propchange: portals/site-live/bridges/bridges-struts/features.html
------------------------------------------------------------------------------
    svn:executable = *

Added: portals/site-live/bridges/bridges-struts/index.html
URL: http://svn.apache.org/viewvc/portals/site-live/bridges/bridges-struts/index.html?rev=1422646&view=auto
==============================================================================
--- portals/site-live/bridges/bridges-struts/index.html (added)
+++ portals/site-live/bridges/bridges-struts/index.html Sun Dec 16 18:11:05 2012
@@ -0,0 +1,270 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+
+
+
+
+
+
+
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>Apache Portals Bridges - Struts Bridge Summary</title>
+    <style type="text/css" media="all">
+      @import url("../css/maven-base.css");
+      @import url("../css/maven-theme.css");
+      @import url("../css/site.css");
+    </style>
+    <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
+        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+      </head>
+  <body class="composite">
+    <div id="banner">
+                  <a href="http://portals.apache.org/" id="bannerLeft">
+    
+                                            <img src="../images/apache-portals.gif" alt="" />
+    
+            </a>
+                        <a href="http://portals.apache.org/bridges/" id="bannerRight">
+    
+            Apache Portals Bridges
+    
+            </a>
+            <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="breadcrumbs">
+          
+  
+
+  
+    
+  
+  
+    
+            <div class="xleft">
+        Last Published: 29 September 2011
+                      </div>
+            <div class="xright">            <a href="http://portals.apache.org/" class="externalLink">Portals</a>
+            |
+                <a href="http://portals.apache.org/applications" class="externalLink">Applications</a>
+            |
+                <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2</a>
+            |
+                <a href="http://www.jcp.org/en/jsr/detail?id=168" class="externalLink">JSR-168</a>
+            |
+                <a href="http://www.jcp.org/en/jsr/detail?id=286" class="externalLink">JSR-286</a>
+            
+  
+
+  
+    
+  
+  
+    
+  </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="leftColumn">
+      <div id="navcolumn">
+           
+  
+
+  
+    
+  
+  
+    
+                   <h5>Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../index.html">Overview</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../news.html">News and Status</a>
+          </li>
+          </ul>
+              <h5>Current Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../bridges-common/index.html">Common Utilities and Interfaces</a>
+          </li>
+              
+                
+              
+      
+              
+            <li class="expanded">
+              <strong>Struts Bridge</strong>
+                <ul>
+                  
+    <li class="none">
+                    <a href="../bridges-struts/features.html">Features</a>
+          </li>
+              </ul>
+        </li>
+              
+    <li class="none">
+                    <a href="../bridges-velocity/index.html">Velocity Bridge</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../bridges-script/index.html">Script Bridge</a>
+          </li>
+              
+                
+              
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="../bridges-groovy/index.html">Groovy Bridge</a>
+                </li>
+          </ul>
+              <h5>Archived Portals Bridges</h5>
+            <ul>
+              
+                
+              
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="../bridges-jsf/index.html">JSF Bridge</a>
+                </li>
+              
+                
+              
+      
+            
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="../bridges-php/index.html">PHP Bridge</a>
+                </li>
+              
+    <li class="none">
+                    <a href="../bridges-perl/index.html">Perl Bridge</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../bridges-portletfilter/index.html">Portlet Filter</a>
+          </li>
+          </ul>
+              <h5>Get Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../download.html">Download</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../release-notes.html">Release Notes</a>
+          </li>
+          </ul>
+              <h5>Support</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../team-list.html">Project Team</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../license.html">Project License</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../mail-lists.html">Mailing List</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../issue-tracking.html">Issue Tracking</a>
+          </li>
+          </ul>
+                                           <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
+            <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img>
+          </a>
+                       
+  
+
+  
+    
+  
+  
+    
+        </div>
+    </div>
+    <div id="bodyColumn">
+      <div id="contentBox">
+        <authors><person name="Ate Douma" email="ate@douma.nu"></authors><div class="section"><h2><a name="Summary"></a>Summary</h2>
+<p>
+        The Struts Bridge allows <a href="http://struts.apache.org" class="externalLink">Struts</a> and Struts Tiles applications to be run
+        as <a href="http://www.jcp.org/en/jsr/detail?id=168" class="externalLink">JSR-168</a> compliant Portlets.
+      </p>
+<p>
+        Existing or new Struts Applications can be transparently deployed as Portlet Application or
+        Web Application.<br />
+
+        The Bridge wraps and enhances the native Struts Framework to overcome its limitations and
+        incompatibilities with the Java Portlet Standard requirements.
+      </p>
+<p>
+        An existing Struts Application can be used as a Portlet <em>without</em> changes to the code or JSP files if:
+        <ul><li>a few common sense rules, based on a proper MVC architecture, are followed for the Struts Action configurations</li>
+<li>Struts Tags are used for rendering all resource paths (like images) and action links</li>
+</ul>
+</p>
+<p>
+        If a Struts Portlet doesn't use Portlet specific features, it can also be accessed and used as Web Application at
+        the same time. Even testing the Struts Application can then be done completely independent of a Portal.
+      </p>
+<p>
+        The Struts Bridge is developed to be independent from specific Portals and uses only a very small interface to
+        the Portal to be able to get access to the Servlet environment at runtime. As all JSR-168 Portlet Containers are
+        required to build upon the Servlet specification, providing this interface for a specific Portal is usually very
+        easy to do, if not done already.
+      </p>
+<p>
+        The Apache Portals <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2 Portal</a> provides this interface
+        natively, as well as example Struts Portlet Applications using the Struts Bridge like a JPetstore Portlet. 
+      </p>
+</div>
+
+      </div>
+    </div>
+    <div class="clear">
+      <hr/>
+    </div>
+    <div id="footer">
+      <div class="xright">&#169;  
+          2004-2011
+    
+          Apache Software Foundation
+          
+  
+
+  
+    
+  
+  
+    
+  </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+  </body>
+</html>

Propchange: portals/site-live/bridges/bridges-struts/index.html
------------------------------------------------------------------------------
    svn:executable = *

Added: portals/site-live/bridges/bridges-velocity/index.html
URL: http://svn.apache.org/viewvc/portals/site-live/bridges/bridges-velocity/index.html?rev=1422646&view=auto
==============================================================================
--- portals/site-live/bridges/bridges-velocity/index.html (added)
+++ portals/site-live/bridges/bridges-velocity/index.html Sun Dec 16 18:11:05 2012
@@ -0,0 +1,384 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+
+
+
+
+
+
+
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>Apache Portals Bridges - Jetspeed Simple Velocity Portlet Guide</title>
+    <style type="text/css" media="all">
+      @import url("../css/maven-base.css");
+      @import url("../css/maven-theme.css");
+      @import url("../css/site.css");
+    </style>
+    <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
+        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+      </head>
+  <body class="composite">
+    <div id="banner">
+                  <a href="http://portals.apache.org/" id="bannerLeft">
+    
+                                            <img src="../images/apache-portals.gif" alt="" />
+    
+            </a>
+                        <a href="http://portals.apache.org/bridges/" id="bannerRight">
+    
+            Apache Portals Bridges
+    
+            </a>
+            <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="breadcrumbs">
+          
+  
+
+  
+    
+  
+  
+    
+            <div class="xleft">
+        Last Published: 29 September 2011
+                      </div>
+            <div class="xright">            <a href="http://portals.apache.org/" class="externalLink">Portals</a>
+            |
+                <a href="http://portals.apache.org/applications" class="externalLink">Applications</a>
+            |
+                <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2</a>
+            |
+                <a href="http://www.jcp.org/en/jsr/detail?id=168" class="externalLink">JSR-168</a>
+            |
+                <a href="http://www.jcp.org/en/jsr/detail?id=286" class="externalLink">JSR-286</a>
+            
+  
+
+  
+    
+  
+  
+    
+  </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="leftColumn">
+      <div id="navcolumn">
+           
+  
+
+  
+    
+  
+  
+    
+                   <h5>Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../index.html">Overview</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../news.html">News and Status</a>
+          </li>
+          </ul>
+              <h5>Current Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../bridges-common/index.html">Common Utilities and Interfaces</a>
+          </li>
+              
+                
+              
+      
+              
+        <li class="collapsed">
+                    <a href="../bridges-struts/index.html">Struts Bridge</a>
+                </li>
+              
+    <li class="none">
+              <strong>Velocity Bridge</strong>
+        </li>
+              
+    <li class="none">
+                    <a href="../bridges-script/index.html">Script Bridge</a>
+          </li>
+              
+                
+              
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="../bridges-groovy/index.html">Groovy Bridge</a>
+                </li>
+          </ul>
+              <h5>Archived Portals Bridges</h5>
+            <ul>
+              
+                
+              
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="../bridges-jsf/index.html">JSF Bridge</a>
+                </li>
+              
+                
+              
+      
+            
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="../bridges-php/index.html">PHP Bridge</a>
+                </li>
+              
+    <li class="none">
+                    <a href="../bridges-perl/index.html">Perl Bridge</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../bridges-portletfilter/index.html">Portlet Filter</a>
+          </li>
+          </ul>
+              <h5>Get Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../download.html">Download</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../release-notes.html">Release Notes</a>
+          </li>
+          </ul>
+              <h5>Support</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="../team-list.html">Project Team</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../license.html">Project License</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../mail-lists.html">Mailing List</a>
+          </li>
+              
+    <li class="none">
+                    <a href="../issue-tracking.html">Issue Tracking</a>
+          </li>
+          </ul>
+                                           <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
+            <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img>
+          </a>
+                       
+  
+
+  
+    
+  
+  
+    
+        </div>
+    </div>
+    <div id="bodyColumn">
+      <div id="contentBox">
+        <subtitle></subtitle><authors><person name="David Le Strat" email="dlestrat@apache.org"><person name="Philip Mark Donaghy" email="philip.donaghy@gmail.com"></authors><div class="section"><h2><a name="Jetspeed_Simple_Velocity_Portlet_Guide"></a>Jetspeed Simple Velocity Portlet Guide</h2>
+<p>
+				This guide provides a tutorial for creating a very
+				simple Velocity portlet with one template in the portlet view mode.
+			</p>
+<div class="section"><h3><a name="a1._The_Portlet_Class"></a>1. The Portlet Class</h3>
+<p>
+				Create the file VelocitySimplest.java in a directory called
+				velocity-simplest/WEB-INF/classes:
+				<div class="source"><pre>
+public class VelocitySimplest extends org.apache.portals.bridges.velocity.GenericVelocityPortlet
+{
+
+    public void doView(javax.portlet.RenderRequest request, javax.portlet.RenderResponse response)
+                throws javax.portlet.PortletException, java.io.IOException
+    {
+        super.doView(request, response);
+    }
+}
+				</pre>
+</div>
+</p>
+<p>
+				Compile the class in the velocity-simplest/WEB-INF/classes directory using the command,
+				<div class="source"><pre>
+javac -cp portlet-api-1.0.jar:portals-bridges-velocity-1.0.jar:portals-bridges-common-1.0.jar VelocitySimplest.java
+				</pre>
+</div>
+</p>
+</div>
+<div class="section"><h3><a name="a2._The_portlet.xml"></a>2. The portlet.xml</h3>
+<p>
+			Create the file portlet.xml in the velocity-simplest/WEB-INF directory.
+			<div class="source"><pre>
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;portlet-app id=&quot;velocitysimplest&quot; version=&quot;1.0&quot;&gt;
+  &lt;portlet id=&quot;VelocitySimplest&quot;&gt;
+    &lt;portlet-name&gt;VelocitySimplest&lt;/portlet-name&gt;
+    &lt;display-name&gt;Velocity Simplest Display Name&lt;/display-name&gt;
+    &lt;portlet-class&gt;VelocitySimplest&lt;/portlet-class&gt;
+    &lt;init-param&gt;
+        &lt;name&gt;ViewPage&lt;/name&gt;
+        &lt;value&gt;/WEB-INF/view/world.vm&lt;/value&gt;
+    &lt;/init-param&gt;
+    &lt;supports&gt;
+      &lt;mime-type&gt;text/html&lt;/mime-type&gt;
+      &lt;portlet-mode&gt;VIEW&lt;/portlet-mode&gt;
+    &lt;/supports&gt;
+    &lt;supported-locale&gt;en&lt;/supported-locale&gt;
+    &lt;portlet-info&gt;
+      &lt;title&gt;Velocity Simplest Title&lt;/title&gt;
+      &lt;short-title&gt;Velocity Simplest Short Title&lt;/short-title&gt;
+    &lt;/portlet-info&gt;
+  &lt;/portlet&gt;
+&lt;/portlet-app&gt;
+			</pre>
+</div>
+</p>
+</div>
+<div class="section"><h3><a name="a3._The_web.xml"></a>3. The web.xml</h3>
+<p>
+			Create the file web.xml in the velocity-simplest/WEB-INF directory.
+			<div class="source"><pre>
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;!DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;
+                         &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;
+&lt;web-app&gt;
+  &lt;display-name&gt;Velocity Simplest&lt;/display-name&gt;
+  &lt;description&gt;The world's simplest Velocity portlet&lt;/description&gt;
+
+  &lt;!-- Define Velocity Servlet --&gt;
+  &lt;servlet&gt;
+    &lt;servlet-name&gt;velocity&lt;/servlet-name&gt;
+    &lt;servlet-class&gt;org.apache.portals.bridges.velocity.BridgesVelocityViewServlet&lt;/servlet-class&gt;
+  &lt;/servlet&gt;
+
+  &lt;!-- Map *.vm files to Velocity  --&gt;
+  &lt;servlet-mapping&gt;
+    &lt;servlet-name&gt;velocity&lt;/servlet-name&gt;
+    &lt;url-pattern&gt;*.vm&lt;/url-pattern&gt;
+  &lt;/servlet-mapping&gt;
+
+&lt;/web-app&gt;
+			</pre>
+</div>
+</p>
+</div>
+<div class="section"><h3><a name="a4._The_View"></a>4. The View</h3>
+<p>
+                        Create the world.vm file in the velocity-simplest/WEB-INF/view directory. Put
+                        whatever content
+                        you desire in it. Notice that the template file is defined in the portlet init
+                        parameter <code>
+                        ViewPage</code>. The objects <a href="http://portals.apache.org/pluto/multiproject/portlet-api/apidocs/javax/portlet/PortletConfig.html" class="externalLink">PortletConfig</a>, <a href="http://portals.apache.org/pluto/multiproject/portlet-api/apidocs/javax/portlet/RenderRequest.html" class="externalLink">RenderRequest</a>, and <a href="http://portals.apache.org/pluto/multiproject/portlet-api/apidocs/javax/portlet/RenderResponse.html" class="externalLink">RenderResponse</a>
+                        are automatically
+                        placed in the Velocity context for use in Velocity templates. Here is a sample
+                        template showing a few of these objects methods and properties.
+<div class="source"><pre>
+$portletConfig.portletName
+$portletConfig.portletContext.serverInfo
+#set ($MESSAGES = $portletConfig.getResourceBundle($renderRequest.Locale))
+$renderRequest.portletMode
+$renderResponse.namespace
+</pre>
+</div>
+</p>
+</div>
+<div class="section"><h3><a name="a5._The_Dependency_JARs"></a>5. The Dependency JARs</h3>
+<p>
+                        Copy the commons-beanutils-1.7.0.jar, commons-collections-3.1.jar,
+                        commons-digester-1.7.jar, portals-bridges-velocity-1.0.jar,
+                        velocity-1.4.jar, and velocity-tools-1.2.jar to the velocity-simplest/WEB-INF/lib
+                        directory. IMPORTANT: 
+                        Do NOT put the portlet-api-1.0.jar in the war file. If you have already built
+                        Jetspeed these
+                        jars should be in your Maven repository. If so executing these commands in the lib
+                        directory will set up the dependencies for you.
+<div class="source"><pre>
+ln -s ~/.maven/repository/commons-beanutils/jars/commons-beanutils-1.7.0.jar
+ln -s ~/.maven/repository/commons-collections/jars/commons-collections-3.1.jar
+ln -s ~/.maven/repository/commons-digester/jars/commons-digester-1.7.jar
+ln -s ~/.maven/repository/org.apache.portals.bridges/jars/portals-bridges-velocity-1.0.jar
+ln -s ~/.maven/repository/velocity/jars/velocity-1.4.jar
+ln -s ~/.maven/repository/velocity-tools/jars/velocity-tools-1.2.jar
+</pre>
+</div>
+</p>
+</div>
+<div class="section"><h3><a name="a6._The_WAR_file"></a>6. The WAR file</h3>
+<p>
+			From the directory velocity-simplest combine the files above into a war file using the command,
+			<div class="source"><pre>
+jar cvf ../velocitysimplest.war .
+			</pre>
+</div>
+</p>
+</div>
+<div class="section"><h3><a name="a7._Deploy_the_WAR_file"></a>7. Deploy the WAR file</h3>
+<p>
+			Copy the war file to <code>$CATALINA_HOME/webapps/jetspeed/WEB-INF/deploy</code>.
+                        Jetspeed-2 will deploy the webapp.
+			</p>
+</div>
+<div class="section"><h3><a name="a8._The_PSML"></a>8. The PSML</h3>
+<p>
+                        Create the PSML page using the Jetspeed portlet chooser. Login and click on the
+                        edit page icon.
+                        Your user must have the permission to edit pages. The user <code>admin</code>
+                        password
+                        <code>admin</code> has permission to edit all pages.
+			</p>
+</div>
+</div>
+
+      </div>
+    </div>
+    <div class="clear">
+      <hr/>
+    </div>
+    <div id="footer">
+      <div class="xright">&#169;  
+          2004-2011
+    
+          Apache Software Foundation
+          
+  
+
+  
+    
+  
+  
+    
+  </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+  </body>
+</html>

Propchange: portals/site-live/bridges/bridges-velocity/index.html
------------------------------------------------------------------------------
    svn:executable = *

Added: portals/site-live/bridges/css/maven-base.css
URL: http://svn.apache.org/viewvc/portals/site-live/bridges/css/maven-base.css?rev=1422646&view=auto
==============================================================================
--- portals/site-live/bridges/css/maven-base.css (added)
+++ portals/site-live/bridges/css/maven-base.css Sun Dec 16 18:11:05 2012
@@ -0,0 +1,143 @@
+body {
+  margin: 0px;
+  padding: 0px;
+}
+img {
+  border:none;
+}
+table {
+  padding:0px;
+  width: 100%;
+  margin-left: -2px;
+  margin-right: -2px;
+}
+acronym {
+  cursor: help;
+  border-bottom: 1px dotted #feb;
+}
+table.bodyTable th, table.bodyTable td {
+  padding: 2px 4px 2px 4px;
+  vertical-align: top;
+}
+div.clear{
+  clear:both;
+  visibility: hidden;
+}
+div.clear hr{
+  display: none;
+}
+#bannerLeft, #bannerRight {
+  font-size: xx-large;
+  font-weight: bold;
+}
+#bannerLeft img, #bannerRight img {
+  margin: 0px;
+}
+.xleft, #bannerLeft img {
+  float:left;
+}
+.xright, #bannerRight {
+  float:right;
+}
+#banner {
+  padding: 0px;
+}
+#banner img {
+  border: none;
+}
+#breadcrumbs {
+  padding: 3px 10px 3px 10px;
+}
+#leftColumn {
+ width: 170px;
+ float:left;
+ overflow: auto;
+}
+#bodyColumn {
+  margin-right: 1.5em;
+  margin-left: 197px;
+}
+#legend {
+  padding: 8px 0 8px 0;
+}
+#navcolumn {
+  padding: 8px 4px 0 8px;
+}
+#navcolumn h5 {
+  margin: 0;
+  padding: 0;
+  font-size: small;
+}
+#navcolumn ul {
+  margin: 0;
+  padding: 0;
+  font-size: small;
+}
+#navcolumn li {
+  list-style-type: none;
+  background-image: none;
+  background-repeat: no-repeat;
+  background-position: 0 0.4em;
+  padding-left: 16px;
+  list-style-position: outside;
+  line-height: 1.2em;
+  font-size: smaller;
+}
+#navcolumn li.expanded {
+  background-image: url(../images/expanded.gif);
+}
+#navcolumn li.collapsed {
+  background-image: url(../images/collapsed.gif);
+}
+#poweredBy {
+  text-align: center;
+}
+#navcolumn img {
+  margin-top: 10px;
+  margin-bottom: 3px;
+}
+#poweredBy img {
+  display:block;
+  margin: 20px 0 20px 17px;
+}
+#search img {
+    margin: 0px;
+    display: block;
+}
+#search #q, #search #btnG {
+    border: 1px solid #999;
+    margin-bottom:10px;
+}
+#search form {
+    margin: 0px;
+}
+#lastPublished {
+  font-size: x-small;
+}
+.navSection {
+  margin-bottom: 2px;
+  padding: 8px;
+}
+.navSectionHead {
+  font-weight: bold;
+  font-size: x-small;
+}
+.section {
+  padding: 4px;
+}
+#footer {
+  padding: 3px 10px 3px 10px;
+  font-size: x-small;
+}
+#breadcrumbs {
+  font-size: x-small;
+  margin: 0pt;
+}
+.source {
+  padding: 12px;
+  margin: 1em 7px 1em 7px;
+}
+.source pre {
+  margin: 0px;
+  padding: 0px;
+}

Propchange: portals/site-live/bridges/css/maven-base.css
------------------------------------------------------------------------------
    svn:executable = *

Added: portals/site-live/bridges/css/maven-theme.css
URL: http://svn.apache.org/viewvc/portals/site-live/bridges/css/maven-theme.css?rev=1422646&view=auto
==============================================================================
--- portals/site-live/bridges/css/maven-theme.css (added)
+++ portals/site-live/bridges/css/maven-theme.css Sun Dec 16 18:11:05 2012
@@ -0,0 +1,141 @@
+body {
+  padding: 0px 0px 10px 0px;
+}
+body, td, select, input, li{
+  font-family: Verdana, Helvetica, Arial, sans-serif;
+  font-size: 13px;
+}
+code{
+  font-family: Courier, monospace;
+  font-size: 13px;
+}
+a {
+  text-decoration: none;
+}
+a:link {
+  color:#36a;
+}
+a:visited  {
+  color:#47a;
+}
+a:active, a:hover {
+  color:#69c;
+}
+#legend li.externalLink {
+  background: url(../images/external.png) left top no-repeat;
+  padding-left: 18px;
+}
+a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover {
+  background: url(../images/external.png) right center no-repeat;
+  padding-right: 18px;
+}
+#legend li.newWindow {
+  background: url(../images/newwindow.png) left top no-repeat;
+  padding-left: 18px;
+}
+a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover {
+  background: url(../images/newwindow.png) right center no-repeat;
+  padding-right: 18px;
+}
+h2 {
+  padding: 4px 4px 4px 6px;
+  border: 1px solid #999;
+  color: #900;
+  background-color: #ddd;
+  font-weight:900;
+  font-size: x-large;
+}
+h3 {
+  padding: 4px 4px 4px 6px;
+  border: 1px solid #aaa;
+  color: #900;
+  background-color: #eee;
+  font-weight: normal;
+  font-size: large;
+}
+h4 {
+  padding: 4px 4px 4px 6px;
+  border: 1px solid #bbb;
+  color: #900;
+  background-color: #fff;
+  font-weight: normal;
+  font-size: large;
+}
+h5 {
+  padding: 4px 4px 4px 6px;
+  color: #900;
+  font-size: normal;
+}
+p {
+  line-height: 1.3em;
+  font-size: small;
+}
+#breadcrumbs {
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+  background-color: #ccc;
+}
+#leftColumn {
+  margin: 10px 0 0 5px;
+  border: 1px solid #999;
+  background-color: #eee;
+}
+#navcolumn h5 {
+  font-size: smaller;
+  border-bottom: 1px solid #aaaaaa;
+  padding-top: 2px;
+  color: #000;
+}
+
+table.bodyTable th {
+  color: white;
+  background-color: #bbb;
+  text-align: left;
+  font-weight: bold;
+}
+
+table.bodyTable th, table.bodyTable td {
+  font-size: 1em;
+}
+
+table.bodyTable tr.a {
+  background-color: #ddd;
+}
+
+table.bodyTable tr.b {
+  background-color: #eee;
+}
+
+.source {
+  border: 1px solid #999;
+}
+dl {
+  padding: 4px 4px 4px 6px;
+  border: 1px solid #aaa;
+  background-color: #ffc;
+}
+dt {
+  color: #900;
+}
+#organizationLogo img, #projectLogo img, #projectLogo span{
+  margin: 8px;
+}
+#banner {
+  border-bottom: 1px solid #fff;
+}
+.errormark, .warningmark, .donemark, .infomark {
+  background: url(../images/icon_error_sml.gif) no-repeat;
+}
+
+.warningmark {
+  background-image: url(../images/icon_warning_sml.gif);
+}
+
+.donemark {
+  background-image: url(../images/icon_success_sml.gif);
+}
+
+.infomark {
+  background-image: url(../images/icon_info_sml.gif);
+}
+

Propchange: portals/site-live/bridges/css/maven-theme.css
------------------------------------------------------------------------------
    svn:executable = *

Added: portals/site-live/bridges/css/print.css
URL: http://svn.apache.org/viewvc/portals/site-live/bridges/css/print.css?rev=1422646&view=auto
==============================================================================
--- portals/site-live/bridges/css/print.css (added)
+++ portals/site-live/bridges/css/print.css Sun Dec 16 18:11:05 2012
@@ -0,0 +1,7 @@
+#banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks, #leftColumn, #navColumn {
+	display: none !important;
+}
+#bodyColumn, body.docs div.docs {
+	margin: 0 !important;
+	border: none !important
+}

Propchange: portals/site-live/bridges/css/print.css
------------------------------------------------------------------------------
    svn:executable = *

Added: portals/site-live/bridges/css/site.css
URL: http://svn.apache.org/viewvc/portals/site-live/bridges/css/site.css?rev=1422646&view=auto
==============================================================================
--- portals/site-live/bridges/css/site.css (added)
+++ portals/site-live/bridges/css/site.css Sun Dec 16 18:11:05 2012
@@ -0,0 +1,290 @@
+/*
+* 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.
+*/
+/*
+---------------------- 
+Theme Style
+----------------------
+*/
+body {
+	background-color: #fff;
+	font-family: Verdana, Helvetica, Arial, sans-serif;
+	margin-left: auto;
+	margin-right: auto;
+	background-repeat: repeat-y;
+	font-size: 13px;
+	padding: 0px;
+}
+
+td,select,input,li {
+	font-family: Verdana, Helvetica, Arial, sans-serif;
+	font-size: 12px;
+	color: #333333;
+}
+
+code {
+	font-size: 12px;
+}
+
+a {
+	text-decoration: none;
+}
+
+a:link {
+	color: #47a;
+}
+
+a:visited {
+	color: #666666;
+}
+
+a:active,a:hover {
+	color: #990000;
+}
+
+#legend li.externalLink {
+	background: url(../images/external.png) left top no-repeat;
+	padding-left: 18px;
+}
+
+a.externalLink,a.externalLink:link,a.externalLink:visited,a.externalLink:active,a.externalLink:hover
+	{
+	background: url(../images/external.png) right center no-repeat;
+	padding-right: 18px;
+}
+
+#legend li.newWindow {
+	background: url(../images/newwindow.png) left top no-repeat;
+	padding-left: 18px;
+}
+
+a.newWindow,a.newWindow:link,a.newWindow:visited,a.newWindow:active,a.newWindow:hover
+	{
+	background: url(../images/newwindow.png) right center no-repeat;
+	padding-right: 18px;
+}
+
+h2 {
+	font-size: 17px;
+	color: #333333;
+}
+
+h3 {
+	padding: 4px 4px 4px 24px;
+	color: #666;
+	background-color: #ccc;
+	font-weight: bold;
+	font-size: 14px;
+	background-image: url(../images/h3.jpg);
+	background-repeat: no-repeat;
+	background-position: left bottom;
+}
+
+p {
+	line-height: 1.3em;
+	font-size: 12px;
+	color: #000;
+}
+
+#breadcrumbs {
+	height: 6px;
+	background-image: url(../images/breadcrumbs.jpg);
+	padding: 5px 10px 14px 20px;
+}
+
+* html #breadcrumbs {
+	padding-bottom: 8px;
+}
+
+#leftColumn {
+	margin: 10px 0 10px 0;
+    background-color: #fff;
+	border-top-color: #ccc;
+	border-top-style: solid;
+	border-top-width: 1px;
+	border-right-color: #ccc;
+	border-right-style: solid;
+	border-right-width: 1px;
+	border-bottom-color: #ccc;
+	border-bottom-style: solid;
+	border-bottom-width: 1px;
+	padding-right: 5px;
+	padding-left: 5px;
+    width: 18%;
+}
+
+#bodyColumn {
+  margin-right: 1.5em;
+  margin-left: 20%;
+}
+
+#navcolumn h5 {
+	font-size: smaller;
+	border-bottom: 1px solid #aaaaaa;
+	padding-top: 2px;
+	padding-left: 9px;
+	color: #49635a;
+	background-image: url(../images/h5.jpg);
+	background-repeat: no-repeat;
+	background-position: left bottom;
+}
+
+table.bodyTable th {
+	color: white;
+	background-color: #bbb;
+	text-align: left;
+	font-weight: bold;
+}
+
+table.bodyTable th,table.bodyTable td {
+	font-size: 11px;
+}
+
+table.bodyTable tr.a {
+	background-color: #ddd;
+}
+
+table.bodyTable tr.b {
+	background-color: #eee;
+}
+
+.source {
+	border: 1px solid #999;
+	overflow: auto
+}
+
+dt {
+	padding: 4px 4px 4px 24px;
+	color: #333333;
+	background-color: #ccc;
+	font-weight: bold;
+	font-size: 14px;
+	background-image: url(../images/h3.jpg);
+	background-repeat: no-repeat;
+	background-position: left bottom;
+}
+
+.subsectionTitle {
+	font-size: 13px;
+	font-weight: bold;
+	color: #666;
+}
+
+table {
+	font-size: 10px;
+}
+
+.xright a:link,.xright a:visited,.xright a:active {
+	color: #666;
+}
+
+.xright a:hover {
+	color: #003300;
+}
+
+#banner {
+	height: 93px;
+	background: url(../images/banner.jpg);
+}
+
+#bannerLeft img, #bannerRight img {
+  margin: 8px;
+}
+
+#navcolumn ul {
+	margin: 5px 0 15px -0em;
+}
+
+#navcolumn ul a {
+	color: #333333;
+}
+
+#navcolumn ul a:hover {
+	color: red;
+}
+
+#intro {
+	border: solid #ccc 1px;
+	margin: 6px 0px 0px 0px;
+	padding: 10px 40px 10px 40px;
+}
+
+.section h2 {
+    background-color: #fff;
+    border: 0px;
+    padding-left: 0px;
+}
+
+.subsection {
+	margin-left: 3px;
+	color: #333333;
+}
+
+.subsection p {
+	font-size: 12px;
+}
+
+#footer {
+	padding: 10px;
+	margin: 20px 0px 20px 0px;
+	border-top: solid #ccc 1px;
+	color: #333333;
+}
+
+/*
+---------------------- 
+Project Style
+----------------------
+*/
+
+#downloadbox {
+	float: right;
+	margin: 0 10px 20px 20px;
+	padding: 5px;
+	border: 1px solid #999;
+	background-color: #eee;
+}
+
+#downloadbox {
+	float: right;
+	margin: 0 10px 20px 20px;
+	padding: 5px;
+	border: 1px solid #999;
+	background-color: #eee;
+}
+
+#downloadbox h5 {
+	color: #000;
+	margin: 0;
+	border-bottom: 1px solid #aaaaaa;
+	font-size: smaller;
+	padding: 0;
+}
+
+#downloadbox p {
+	margin-top: 1em;
+	margin-bottom: 0;
+}
+
+#downloadbox ul {
+	margin-top: 0;
+	margin-bottom: 1em;
+	list-style-type: disc;
+}
+
+#downloadbox li {
+	font-size: smaller;
+}
\ No newline at end of file

Propchange: portals/site-live/bridges/css/site.css
------------------------------------------------------------------------------
    svn:executable = *

Added: portals/site-live/bridges/dependencies.html
URL: http://svn.apache.org/viewvc/portals/site-live/bridges/dependencies.html?rev=1422646&view=auto
==============================================================================
--- portals/site-live/bridges/dependencies.html (added)
+++ portals/site-live/bridges/dependencies.html Sun Dec 16 18:11:05 2012
@@ -0,0 +1,234 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+
+
+
+
+
+
+
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>Apache Portals Bridges - Project Dependencies</title>
+    <style type="text/css" media="all">
+      @import url("./css/maven-base.css");
+      @import url("./css/maven-theme.css");
+      @import url("./css/site.css");
+    </style>
+    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
+        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+      </head>
+  <body class="composite">
+    <div id="banner">
+                  <a href="http://portals.apache.org/" id="bannerLeft">
+    
+                                            <img src="images/apache-portals.gif" alt="" />
+    
+            </a>
+                        <a href="http://portals.apache.org/bridges/" id="bannerRight">
+    
+            Apache Portals Bridges
+    
+            </a>
+            <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="breadcrumbs">
+          
+  
+
+  
+    
+  
+  
+    
+            <div class="xleft">
+        Last Published: 29 September 2011
+                      </div>
+            <div class="xright">            <a href="http://portals.apache.org/" class="externalLink">Portals</a>
+            |
+                <a href="http://portals.apache.org/applications" class="externalLink">Applications</a>
+            |
+                <a href="http://portals.apache.org/jetspeed-2" class="externalLink">Jetspeed-2</a>
+            |
+                <a href="http://www.jcp.org/en/jsr/detail?id=168" class="externalLink">JSR-168</a>
+            |
+                <a href="http://www.jcp.org/en/jsr/detail?id=286" class="externalLink">JSR-286</a>
+            
+  
+
+  
+    
+  
+  
+    
+  </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="leftColumn">
+      <div id="navcolumn">
+           
+  
+
+  
+    
+  
+  
+    
+                   <h5>Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="index.html">Overview</a>
+          </li>
+              
+    <li class="none">
+                    <a href="news.html">News and Status</a>
+          </li>
+          </ul>
+              <h5>Current Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="bridges-common/index.html">Common Utilities and Interfaces</a>
+          </li>
+              
+                
+              
+      
+              
+        <li class="collapsed">
+                    <a href="bridges-struts/index.html">Struts Bridge</a>
+                </li>
+              
+    <li class="none">
+                    <a href="bridges-velocity/index.html">Velocity Bridge</a>
+          </li>
+              
+    <li class="none">
+                    <a href="bridges-script/index.html">Script Bridge</a>
+          </li>
+              
+                
+              
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="bridges-groovy/index.html">Groovy Bridge</a>
+                </li>
+          </ul>
+              <h5>Archived Portals Bridges</h5>
+            <ul>
+              
+                
+              
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="bridges-jsf/index.html">JSF Bridge</a>
+                </li>
+              
+                
+              
+      
+            
+      
+            
+      
+              
+        <li class="collapsed">
+                    <a href="bridges-php/index.html">PHP Bridge</a>
+                </li>
+              
+    <li class="none">
+                    <a href="bridges-perl/index.html">Perl Bridge</a>
+          </li>
+              
+    <li class="none">
+                    <a href="bridges-portletfilter/index.html">Portlet Filter</a>
+          </li>
+          </ul>
+              <h5>Get Portals Bridges</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="download.html">Download</a>
+          </li>
+              
+    <li class="none">
+                    <a href="release-notes.html">Release Notes</a>
+          </li>
+          </ul>
+              <h5>Support</h5>
+            <ul>
+              
+    <li class="none">
+                    <a href="team-list.html">Project Team</a>
+          </li>
+              
+    <li class="none">
+                    <a href="license.html">Project License</a>
+          </li>
+              
+    <li class="none">
+                    <a href="mail-lists.html">Mailing List</a>
+          </li>
+              
+    <li class="none">
+                    <a href="issue-tracking.html">Issue Tracking</a>
+          </li>
+          </ul>
+                                           <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
+            <img alt="Built by Maven" src="./images/logos/maven-feather.png"></img>
+          </a>
+                       
+  
+
+  
+    
+  
+  
+    
+        </div>
+    </div>
+    <div id="bodyColumn">
+      <div id="contentBox">
+        <div class="section"><h2>Project Dependencies</h2>
+<p>There are no dependencies for this project. It is a standalone application that does not depend on any other project.</p>
+</div>
+
+      </div>
+    </div>
+    <div class="clear">
+      <hr/>
+    </div>
+    <div id="footer">
+      <div class="xright">&#169;  
+          2004-2011
+    
+          Apache Software Foundation
+          
+  
+
+  
+    
+  
+  
+    
+  </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+  </body>
+</html>

Propchange: portals/site-live/bridges/dependencies.html
------------------------------------------------------------------------------
    svn:executable = *