You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by st...@apache.org on 2004/11/11 00:04:34 UTC
svn commit: rev 57396 - in incubator/beehive/site: build/site build/site/controls build/site/pageflow build/site/pageflow/images build/site/wsm src/documentation/content/xdocs/pageflow
Author: steveh
Date: Wed Nov 10 15:04:32 2004
New Revision: 57396
Added:
incubator/beehive/site/build/site/pageflow/images/
incubator/beehive/site/build/site/pageflow/images/impl-flow-1.png (contents, props changed)
incubator/beehive/site/build/site/pageflow/images/impl-flow-2.png (contents, props changed)
incubator/beehive/site/build/site/pageflow/images/logical-flow-1.png (contents, props changed)
incubator/beehive/site/build/site/pageflow/images/logical-flow-2.png (contents, props changed)
incubator/beehive/site/build/site/pageflow/pageflow_altering.html (contents, props changed)
incubator/beehive/site/build/site/pageflow/pageflow_building.html (contents, props changed)
incubator/beehive/site/build/site/pageflow/pageflow_controllers.html (contents, props changed)
incubator/beehive/site/build/site/pageflow/pageflow_jsp.html (contents, props changed)
incubator/beehive/site/build/site/pageflow/pageflow_overview.html (contents, props changed)
incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_altering.xml (contents, props changed)
incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_building.xml (contents, props changed)
incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_controllers.xml (contents, props changed)
incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_jsp.xml (contents, props changed)
incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_overview.xml (contents, props changed)
Modified:
incubator/beehive/site/build/site/Controls.html
incubator/beehive/site/build/site/contributors.html
incubator/beehive/site/build/site/controls/sample_controls-blank.html
incubator/beehive/site/build/site/controls/sample_controls-db.html
incubator/beehive/site/build/site/controls/tutorial_controls.html
incubator/beehive/site/build/site/downloads.html
incubator/beehive/site/build/site/faq.html
incubator/beehive/site/build/site/index.html
incubator/beehive/site/build/site/jpetstore.html
incubator/beehive/site/build/site/license.html
incubator/beehive/site/build/site/mailinglists.html
incubator/beehive/site/build/site/pageflow/guide.html
incubator/beehive/site/build/site/pageflow/sample_netui-blank.html
incubator/beehive/site/build/site/pageflow/tutorial_pageflow.html
incubator/beehive/site/build/site/reference.html
incubator/beehive/site/build/site/webservices.html
incubator/beehive/site/build/site/wsm/sample_AddressBook.html
incubator/beehive/site/build/site/wsm/sample_Dashboard.html
incubator/beehive/site/build/site/wsm/sample_wsm-blank.html
incubator/beehive/site/build/site/wsm/tutorial_wsm.html
Log:
Adding Bob McWhirter's contribution to the page flow docs.
Modified: incubator/beehive/site/build/site/Controls.html
==============================================================================
--- incubator/beehive/site/build/site/Controls.html (original)
+++ incubator/beehive/site/build/site/Controls.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/contributors.html
==============================================================================
--- incubator/beehive/site/build/site/contributors.html (original)
+++ incubator/beehive/site/build/site/contributors.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/controls/sample_controls-blank.html
==============================================================================
--- incubator/beehive/site/build/site/controls/sample_controls-blank.html (original)
+++ incubator/beehive/site/build/site/controls/sample_controls-blank.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/controls/sample_controls-db.html
==============================================================================
--- incubator/beehive/site/build/site/controls/sample_controls-db.html (original)
+++ incubator/beehive/site/build/site/controls/sample_controls-db.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/controls/tutorial_controls.html
==============================================================================
--- incubator/beehive/site/build/site/controls/tutorial_controls.html (original)
+++ incubator/beehive/site/build/site/controls/tutorial_controls.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/downloads.html
==============================================================================
--- incubator/beehive/site/build/site/downloads.html (original)
+++ incubator/beehive/site/build/site/downloads.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/faq.html
==============================================================================
--- incubator/beehive/site/build/site/faq.html (original)
+++ incubator/beehive/site/build/site/faq.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/index.html
==============================================================================
--- incubator/beehive/site/build/site/index.html (original)
+++ incubator/beehive/site/build/site/index.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
@@ -280,20 +300,20 @@
<a href="#Get+Involved">Get Involved</a>
</li>
</ul>
- <!--
- Beehive
- Welcome<should link to the HTML page created from Welcome.doc>
- License<should link to http://www.apache.org/licenses/LICENSE-2.0>
-
- Documentation
- FAQ<should link to the HTML page created from FAQ.doc>
- Controls Overview<should link to Kyle's control Overview>
- Controls Programming<should link to Kyle's Controls programming pdf>
- Web Services (JSR 181)<should link to http://jcp.org/en/jsr/detail?id=181>
-
- Contributing
- Mailing Lists<should link to HTML Page created from MailingLists.doc>
- Contributers<should link to HTML Page created from Contributers.doc>
+ <!--
+ Beehive
+ Welcome<should link to the HTML page created from Welcome.doc>
+ License<should link to http://www.apache.org/licenses/LICENSE-2.0>
+
+ Documentation
+ FAQ<should link to the HTML page created from FAQ.doc>
+ Controls Overview<should link to Kyle's control Overview>
+ Controls Programming<should link to Kyle's Controls programming pdf>
+ Web Services (JSR 181)<should link to http://jcp.org/en/jsr/detail?id=181>
+
+ Contributing
+ Mailing Lists<should link to HTML Page created from MailingLists.doc>
+ Contributers<should link to HTML Page created from Contributers.doc>
-->
Modified: incubator/beehive/site/build/site/jpetstore.html
==============================================================================
--- incubator/beehive/site/build/site/jpetstore.html (original)
+++ incubator/beehive/site/build/site/jpetstore.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/license.html
==============================================================================
--- incubator/beehive/site/build/site/license.html (original)
+++ incubator/beehive/site/build/site/license.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/mailinglists.html
==============================================================================
--- incubator/beehive/site/build/site/mailinglists.html (original)
+++ incubator/beehive/site/build/site/mailinglists.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/pageflow/guide.html
==============================================================================
--- incubator/beehive/site/build/site/pageflow/guide.html (original)
+++ incubator/beehive/site/build/site/pageflow/guide.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Added: incubator/beehive/site/build/site/pageflow/images/impl-flow-1.png
==============================================================================
Binary file. No diff available.
Added: incubator/beehive/site/build/site/pageflow/images/impl-flow-2.png
==============================================================================
Binary file. No diff available.
Added: incubator/beehive/site/build/site/pageflow/images/logical-flow-1.png
==============================================================================
Binary file. No diff available.
Added: incubator/beehive/site/build/site/pageflow/images/logical-flow-2.png
==============================================================================
Binary file. No diff available.
Added: incubator/beehive/site/build/site/pageflow/pageflow_altering.html
==============================================================================
--- (empty file)
+++ incubator/beehive/site/build/site/pageflow/pageflow_altering.html Wed Nov 10 15:04:32 2004
@@ -0,0 +1,521 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Altering a Page Flow</title>
+<link type="text/css" href="../skin/page.css" rel="stylesheet">
+</head>
+<body text="#000000" bgcolor="#FFFFFF">
+<!--================= start Navigation Path ==================-->
+<table summary="navigation path" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td nowrap="nowrap" valign="middle" bgcolor="#CFDCED" height="20"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><!--===== breadcrumb trail (javascript-generated) ====--><font size="2" face="Arial, Helvetica, Sans-serif"><script src="../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script></font></td>
+</tr>
+<tr>
+<td bgcolor="#4C6C8F" height="2"><img height="2" width="2" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+<!--================= end Navigation Path ==================-->
+<!--================= start Banner ==================-->
+<table summary="header with logos" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<!--================= start Group Logo ==================-->
+<td bgcolor="#294563"><a href="http://incubator.apache.org/"><img border="0" class="logoImage" alt="Apache Incubator" src="../images/_incubator-logo.gif"></a></td>
+<!--================= end Group Logo ==================-->
+<!--================= start Project Logo ==================--><td width="100%" align="center" bgcolor="#294563"><a href="http://incubator.apache.org/beehive"><img border="0" class="logoImage" alt="Apache Beehive" src="../images/_beehive_logo_wide.gif"></a></td>
+<!--================= end Project Logo ==================-->
+<!--================= start Search ==================--><td valign="top" rowspan="2" bgcolor="#294563">
+<form target="_blank" action="http://www.google.com/search" method="get">
+<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
+<tr>
+<td colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="incubator.apache.org" name="sitesearch" type="hidden"><input size="15" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="Search" type="submit">
+<br>
+<font face="Arial, Helvetica, Sans-serif" size="2" color="white">
+ the Apache Beehive site
+
+
+ </font></td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td><img alt="" border="0" height="10" width="9" src="../skin/images/search-left.gif"></td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td><img alt="" border="0" height="10" width="9" src="../skin/images/search-right.gif"></td>
+</tr>
+</table>
+</form>
+</td>
+<!--================= start Search ==================--><td bgcolor="#294563"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td valign="bottom" bgcolor="#294563" colspan="2">
+<!--================= start Tabs ==================-->
+<div class="tab">
+<table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td width="6"><img alt="" height="8" width="6" src="../skin/images/spacer.gif"></td><td valign="bottom">
+<table summary="selected tab" style="height: 1.8em" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../skin/images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b><a class="base-selected" href="../index.html">Home</a></b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../skin/images/tabSel-right.gif"></td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</div>
+<!--================= end Tabs ==================-->
+</td><td bgcolor="#294563"><img alt="" width="1" height="1" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td bgcolor="#4C6C8F" colspan="4"><img width="1" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+<!--================= end Banner ==================-->
+<!--================= start Menu, NavBar, Content ==================-->
+<table summary="page content" bgcolor="#ffffff" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td valign="top">
+<table summary="menu" border="0" cellspacing="0" cellpadding="0">
+<tr>
+<!--================= start left top NavBar ==================-->
+<td rowspan="3" valign="top">
+<table summary="blue line" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td bgcolor="#CFDCED"><font color="#4C6C8F" size="4" face="Arial, Helvetica, Sans-serif"> </font></td>
+</tr>
+<tr>
+<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+</td>
+<!--================= end left top NavBar ==================--><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap" valign="top" bgcolor="#4C6C8F">
+<!--================= start Menu items ==================-->
+<div class="menu">
+<ul>
+<li>
+<font color="#CFDCED">Beehive</font>
+<ul>
+
+<li>
+<a href="../index.html">Welcome</a>
+</li>
+
+<li>
+<a href="../license.html">License</a>
+</li>
+
+<li>
+<a href="../downloads.html">Downloads</a>
+</li>
+
+<li>
+<a href="../faq.html">FAQ</a>
+</li>
+
+</ul>
+</li>
+<li>
+<font color="#CFDCED">Documentation</font>
+<ul>
+
+
+<li>
+<font color="#CFDCED">Page Flows</font>
+<ul>
+
+<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<span class="sel"><font color="#ffcc00">Altering a Page Flow</font></span>
+</li>
+
+<li>
+<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
+</li>
+
+<li>
+<a href="../pageflow/guide.html">Page Flow Programming</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Controls</font>
+<ul>
+
+<li>
+<a href="../controls/tutorial_controls.html">Control Tutorial</a>
+</li>
+
+<li>
+<a href="../Controls.html">Control Programming</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Web Services</font>
+<ul>
+
+<li>
+<a href="../wsm/tutorial_wsm.html">Web Services Tutorial</a>
+</li>
+
+<li>
+<a href="../webservices.html">Web Services (JSR 181)</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Samples</font>
+<ul>
+
+<li>
+<a href="../jpetstore.html">Petstore</a>
+</li>
+
+<li>
+<a href="../wsm/sample_Dashboard.html">Petstore Dashboard</a>
+</li>
+
+<li>
+<a href="../wsm/sample_AddressBook.html">AddressBook/Employee</a>
+</li>
+
+<li>
+<a href="../controls/sample_controls-db.html">Database Control</a>
+</li>
+
+<li>
+<a href="../pageflow/sample_netui-blank.html">Page Flow Project</a>
+</li>
+
+<li>
+<a href="../controls/sample_controls-blank.html">Control Project</a>
+</li>
+
+<li>
+<a href="../wsm/sample_wsm-blank.html">Web Service Project</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<a href="../reference.html">Reference Docs</a>
+</li>
+
+
+
+</ul>
+</li>
+<li>
+<font color="#CFDCED">Community</font>
+<ul>
+
+<li>
+<a href="../mailinglists.html">Mailing Lists</a>
+</li>
+
+<li>
+<a href="../contributors.html">Contributors</a>
+</li>
+
+</ul>
+</li>
+</ul>
+</div>
+<!--================= end Menu items ==================-->
+</td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td valign="bottom" align="left" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-left.gif"></td><td bgcolor="#4C6C8F"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" align="right" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-right.gif"></td>
+</tr>
+<tr>
+<td height="1" bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+</td><td valign="top" width="100%">
+<table summary="content" width="100%" border="0" cellpadding="0" cellspacing="0">
+<!--================= start middle NavBar ==================-->
+<tr>
+<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td align="left" width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="left" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
+
+
+ </font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="right" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
+
+
+ </font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<!--================= end middle NavBar ==================-->
+<!--================= start Content==================-->
+<tr>
+<td align="left" width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td colspan="2" align="left" width="100%">
+<div class="content">
+<table class="title" summary="">
+<tr>
+<td valign="middle">
+<h1>Altering a Page Flow</h1>
+</td>
+</tr>
+</table>
+<ul class="minitoc">
+<li>
+<a href="#introduction">Introduction</a>
+</li>
+<li>
+<a href="#logical_flow_change">Logical Flow Change</a>
+</li>
+<li>
+<a href="#impl_flow_change">Implementation Flow Change</a>
+</li>
+<li>
+<a href="#changes_to_jsp">Changes Required in the JSPs</a>
+</li>
+<li>
+<a href="#changes_to_controller">Changes Required in the Controller Class</a>
+<ul class="minitoc">
+<li>
+<a href="#redirecting_login">Redirect login()</a>
+</li>
+</ul>
+</li>
+</ul>
+
+
+<a name="N1000C"></a><a name="introduction"></a>
+<h3>Introduction</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ In the previous pages, you were shown how to stitch together a controller class
+ and a set of JSP pages. One of the most powerful features of the Beehive way
+ of building applications is being able to change the flow by editing only the
+ controller class file, without having to touch the JSP pages.
+ </p>
+</div>
+
+
+<a name="N10016"></a><a name="logical_flow_change"></a>
+<h3>Logical Flow Change</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Sometime after deploying the application, it is decided that before allowing a
+ user to login, they must first be presented a page describing the terms of
+ service for using the application. Additionally, a decision is made to have
+ the "Sign Up" action automatically log-in the new user so they don't have
+ to traverse the login screen.
+ </p>
+<p>
+ The original logical flow looked like this:
+ </p>
+<p>
+
+<img alt="logical flow, before alteration" src="images/logical-flow-1.png">
+ </p>
+<p>
+ After these changes, the logical flow now resembles:
+ </p>
+<p>
+
+<img alt="logical flow, after alteration" src="images/logical-flow-2.png">
+ </p>
+</div>
+
+
+<a name="N10034"></a><a name="impl_flow_change"></a>
+<h3>Implementation Flow Change</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ To accomodate the new logical flow, the implementation flow model originally looked like this:
+ </p>
+<p>
+
+<img alt="logical flow, after alteration" src="images/impl-flow-1.png">
+ </p>
+<p>
+ After removing <span class="codefrag">thanks.jsp</span>, adding <span class="codefrag">terms.jsp</span>, adding an
+ <span class="codefrag">acceptTerms()</span> method, and re-routing the post-signup flow, looks like:
+ </p>
+<p>
+
+<img alt="logical flow, after alteration" src="images/impl-flow-2.png">
+ </p>
+</div>
+
+
+<a name="N10058"></a><a name="changes_to_jsp"></a>
+<h3>Changes Required in the JSPs</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Strictly speaking, no changes to JSP content are required. Only deletion of the
+ unused <span class="codefrag">thanks.jsp</span> and creation of the <span class="codefrag">terms.jsp</span> is
+ all that is required.
+ </p>
+<p>
+
+<strong>Note:</strong>, The <span class="codefrag">signup.jsp</span> page
+ that previously would direct a user to <span class="codefrag">thanks.jsp</span> but will now
+ send him to <span class="codefrag">mypage.jsp</span> requires <em>absolutely no changes</em>.
+ </p>
+<p>
+ The <span class="codefrag">terms.jsp</span> page would include a link through a new <span class="codefrag">acceptTerms()</span>
+ controller method, similar to:
+ </p>
+<pre class="code">
+ <netui:anchor action="acceptTerms">Accept these Terms of Service</netui:anchor>
+</pre>
+</div>
+
+
+<a name="N10088"></a><a name="changes_to_controller"></a>
+<h3>Changes Required in the Controller Class</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ To change the flow, a few simple edits of the controller class are all that is required.
+ </p>
+<a name="N10091"></a><a name="redirecting_login"></a>
+<h4>Redirect login()</h4>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Previous, the <span class="codefrag">login()</span> controller method was defined to statically
+ return the forward to <span class="codefrag">login.jsp</span>.
+ </p>
+<pre class="code">
+ @Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="<strong>login.jsp</strong>" );
+ }
+ )
+ public Forward login()
+ {
+ return new Forward( "success" );
+ }
+</pre>
+<p>
+ By changing the <span class="codefrag">path</span> property of the <span class="codefrag">Jpf.Forward</span> associated
+ with this page, all links that previously took the user to <span class="codefrag">login.jsp</span> will
+ now direct him to <span class="codefrag">terms.jsp</span>.
+ </p>
+<pre class="code">
+ @Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="<strong>terms.jsp</strong>" );
+ }
+ )
+ public Forward login()
+ {
+ return new Forward( "success" );
+ }
+</pre>
+<p>
+ The <span class="codefrag">terms.jsp</span> page links through a new <span class="codefrag">acceptTerms()</span>
+ controller method which simply is a static forward to <span class="codefrag">login.jsp</span>.
+ </p>
+<pre class="code">
+ @Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="login.jsp" );
+ }
+ )
+ public Forward acceptTerms()
+ {
+ return new Forward( "success" );
+ }
+</pre>
+<p>
+ This biggest change in the controller class is in the <span class="codefrag">processSignUp()</span>
+ controller method. Instead of just recording the user's information, it now must
+ also perform the logic of logging in the user automatically. Additionally, the
+ forward returned by it will send the user directly to <span class="codefrag">mypage.jsp</span>
+ instead of the not-unused <span class="codefrag">thanks.jsp</span> page.
+ </p>
+<pre class="code">
+ @Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="<strong>mypage.jsp</strong>" );
+ }
+ )
+ public Forward processSignUp(SignUpForm form)
+ {
+ // record the user's sign-up information.
+
+ ...
+ ...
+
+ // perform automatic login for the user.
+
+ HttpServletRequest request = getRequest();
+ HttpSession session = request.getSession();
+
+ session.setAttribute( "authenticated_user",
+ form.getUsername() );
+
+ return new Forward( "success" );
+ }
+</pre>
+<p>
+ The flow has successfully be altered to now include a jump through the site's
+ terms-of-service and automatically logging-in newly signed-up users.
+ </p>
+</div>
+</div>
+
+
+
+
+
+<div class="attribution"></div>
+</div>
+</td><td width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<!--================= end Content==================-->
+</table>
+</td>
+</tr>
+</table>
+<!--================= end Menu, NavBar, Content ==================-->
+<!--================= start Footer ==================-->
+<table summary="footer" cellspacing="0" cellpadding="0" width="100%" border="0">
+<tr>
+<td colspan="2" height="1" bgcolor="#4C6C8F"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"><a href="../skin/images/label.gif"></a><a href="../skin/images/page.gif"></a><a href="../skin/images/chapter.gif"></a><a href="../skin/images/chapter_open.gif"></a><a href="../skin/images/current.gif"></a><a href="/favicon.ico"></a></td>
+</tr>
+<tr>
+<td colspan="2" bgcolor="#CFDCED" class="copyright" align="center"><font size="2" face="Arial, Helvetica, Sans-Serif">Copyright ©
+ 2004 The Apache Software Foundation. All rights reserved.<script type="text/javascript" language="JavaScript"><!--
+ document.write(" - "+"Last Published: " + document.lastModified);
+ // --></script></font></td>
+</tr>
+<tr>
+<td colspan="2" align="left" bgcolor="#CFDCED" class="logos"></td>
+</tr>
+</table>
+<!--================= end Footer ==================-->
+</body>
+</html>
Added: incubator/beehive/site/build/site/pageflow/pageflow_building.html
==============================================================================
--- (empty file)
+++ incubator/beehive/site/build/site/pageflow/pageflow_building.html Wed Nov 10 15:04:32 2004
@@ -0,0 +1,785 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Building a Page Flow Web-App</title>
+<link type="text/css" href="../skin/page.css" rel="stylesheet">
+</head>
+<body text="#000000" bgcolor="#FFFFFF">
+<!--================= start Navigation Path ==================-->
+<table summary="navigation path" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td nowrap="nowrap" valign="middle" bgcolor="#CFDCED" height="20"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><!--===== breadcrumb trail (javascript-generated) ====--><font size="2" face="Arial, Helvetica, Sans-serif"><script src="../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script></font></td>
+</tr>
+<tr>
+<td bgcolor="#4C6C8F" height="2"><img height="2" width="2" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+<!--================= end Navigation Path ==================-->
+<!--================= start Banner ==================-->
+<table summary="header with logos" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<!--================= start Group Logo ==================-->
+<td bgcolor="#294563"><a href="http://incubator.apache.org/"><img border="0" class="logoImage" alt="Apache Incubator" src="../images/_incubator-logo.gif"></a></td>
+<!--================= end Group Logo ==================-->
+<!--================= start Project Logo ==================--><td width="100%" align="center" bgcolor="#294563"><a href="http://incubator.apache.org/beehive"><img border="0" class="logoImage" alt="Apache Beehive" src="../images/_beehive_logo_wide.gif"></a></td>
+<!--================= end Project Logo ==================-->
+<!--================= start Search ==================--><td valign="top" rowspan="2" bgcolor="#294563">
+<form target="_blank" action="http://www.google.com/search" method="get">
+<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
+<tr>
+<td colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="incubator.apache.org" name="sitesearch" type="hidden"><input size="15" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="Search" type="submit">
+<br>
+<font face="Arial, Helvetica, Sans-serif" size="2" color="white">
+ the Apache Beehive site
+
+
+ </font></td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td><img alt="" border="0" height="10" width="9" src="../skin/images/search-left.gif"></td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td><img alt="" border="0" height="10" width="9" src="../skin/images/search-right.gif"></td>
+</tr>
+</table>
+</form>
+</td>
+<!--================= start Search ==================--><td bgcolor="#294563"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td valign="bottom" bgcolor="#294563" colspan="2">
+<!--================= start Tabs ==================-->
+<div class="tab">
+<table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td width="6"><img alt="" height="8" width="6" src="../skin/images/spacer.gif"></td><td valign="bottom">
+<table summary="selected tab" style="height: 1.8em" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../skin/images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b><a class="base-selected" href="../index.html">Home</a></b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../skin/images/tabSel-right.gif"></td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</div>
+<!--================= end Tabs ==================-->
+</td><td bgcolor="#294563"><img alt="" width="1" height="1" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td bgcolor="#4C6C8F" colspan="4"><img width="1" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+<!--================= end Banner ==================-->
+<!--================= start Menu, NavBar, Content ==================-->
+<table summary="page content" bgcolor="#ffffff" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td valign="top">
+<table summary="menu" border="0" cellspacing="0" cellpadding="0">
+<tr>
+<!--================= start left top NavBar ==================-->
+<td rowspan="3" valign="top">
+<table summary="blue line" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td bgcolor="#CFDCED"><font color="#4C6C8F" size="4" face="Arial, Helvetica, Sans-serif"> </font></td>
+</tr>
+<tr>
+<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+</td>
+<!--================= end left top NavBar ==================--><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap" valign="top" bgcolor="#4C6C8F">
+<!--================= start Menu items ==================-->
+<div class="menu">
+<ul>
+<li>
+<font color="#CFDCED">Beehive</font>
+<ul>
+
+<li>
+<a href="../index.html">Welcome</a>
+</li>
+
+<li>
+<a href="../license.html">License</a>
+</li>
+
+<li>
+<a href="../downloads.html">Downloads</a>
+</li>
+
+<li>
+<a href="../faq.html">FAQ</a>
+</li>
+
+</ul>
+</li>
+<li>
+<font color="#CFDCED">Documentation</font>
+<ul>
+
+
+<li>
+<font color="#CFDCED">Page Flows</font>
+<ul>
+
+<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<span class="sel"><font color="#ffcc00">Building a Page Flow Web-App</font></span>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
+<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
+</li>
+
+<li>
+<a href="../pageflow/guide.html">Page Flow Programming</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Controls</font>
+<ul>
+
+<li>
+<a href="../controls/tutorial_controls.html">Control Tutorial</a>
+</li>
+
+<li>
+<a href="../Controls.html">Control Programming</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Web Services</font>
+<ul>
+
+<li>
+<a href="../wsm/tutorial_wsm.html">Web Services Tutorial</a>
+</li>
+
+<li>
+<a href="../webservices.html">Web Services (JSR 181)</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Samples</font>
+<ul>
+
+<li>
+<a href="../jpetstore.html">Petstore</a>
+</li>
+
+<li>
+<a href="../wsm/sample_Dashboard.html">Petstore Dashboard</a>
+</li>
+
+<li>
+<a href="../wsm/sample_AddressBook.html">AddressBook/Employee</a>
+</li>
+
+<li>
+<a href="../controls/sample_controls-db.html">Database Control</a>
+</li>
+
+<li>
+<a href="../pageflow/sample_netui-blank.html">Page Flow Project</a>
+</li>
+
+<li>
+<a href="../controls/sample_controls-blank.html">Control Project</a>
+</li>
+
+<li>
+<a href="../wsm/sample_wsm-blank.html">Web Service Project</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<a href="../reference.html">Reference Docs</a>
+</li>
+
+
+
+</ul>
+</li>
+<li>
+<font color="#CFDCED">Community</font>
+<ul>
+
+<li>
+<a href="../mailinglists.html">Mailing Lists</a>
+</li>
+
+<li>
+<a href="../contributors.html">Contributors</a>
+</li>
+
+</ul>
+</li>
+</ul>
+</div>
+<!--================= end Menu items ==================-->
+</td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td valign="bottom" align="left" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-left.gif"></td><td bgcolor="#4C6C8F"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" align="right" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-right.gif"></td>
+</tr>
+<tr>
+<td height="1" bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+</td><td valign="top" width="100%">
+<table summary="content" width="100%" border="0" cellpadding="0" cellspacing="0">
+<!--================= start middle NavBar ==================-->
+<tr>
+<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td align="left" width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="left" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
+
+
+ </font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="right" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
+
+
+ </font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<!--================= end middle NavBar ==================-->
+<!--================= start Content==================-->
+<tr>
+<td align="left" width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td colspan="2" align="left" width="100%">
+<div class="content">
+<table class="title" summary="">
+<tr>
+<td valign="middle">
+<h1>Building a Page Flow Web-App</h1>
+</td>
+</tr>
+</table>
+<ul class="minitoc">
+<li>
+<a href="#introduction">Introduction</a>
+</li>
+<li>
+<a href="#source_tree_layout">Source Tree Layout</a>
+<ul class="minitoc">
+<li>
+<a href="#top_level">$WEBAPP_DIR/</a>
+</li>
+<li>
+<a href="#web-inf">$WEBAPP_DIR/WEB-INF/</a>
+</li>
+<li>
+<a href="#web-inf_src">$WEBAPP_DIR/WEB-INF/src/</a>
+</li>
+<li>
+<a href="#web-inf_lib">$WEBAPP_DIR/WEB-INF/lib/</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#running_ant">Running Ant</a>
+</li>
+<li>
+<a href="#deploying">Deploying the Web-app</a>
+</li>
+<li>
+<a href="#next">Next...</a>
+</li>
+</ul>
+
+
+<a name="N1000C"></a><a name="introduction"></a>
+<h3>Introduction</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Now that the theory of Java Page Flows has been explained, you need to know
+ how to concretely put together a web-app that uses JPFs. Beehive ships with
+ a set of Ant buildfiles to make the building of an application much easier.
+ </p>
+</div>
+
+
+<a name="N10016"></a><a name="source_tree_layout"></a>
+<h3>Source Tree Layout</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ The layout of your project may be anywhere on your local disk. We assume
+ that the environment variable $WEBAPP_DIR points to the top-level of your
+ application.
+ </p>
+<ul>
+
+<li>
+<span class="codefrag">$WEBAPP_DIR/</span>
+
+<ul>
+
+<li>
+<span class="codefrag">Controller.jpf</span>
+</li>
+
+<li>
+<span class="codefrag">index.jsp</span>
+</li>
+
+<li>
+<span class="codefrag">login.jsp</span>
+</li>
+
+<li>
+<span class="codefrag">signup.jsp</span>
+</li>
+
+<li>
+<span class="codefrag">mypage.jsp</span>
+</li>
+
+<li>
+<span class="codefrag">resources/</span>
+</li>
+
+<li>
+<span class="codefrag">WEB-INF/</span>
+
+<ul>
+
+<li>
+<span class="codefrag">src/</span>
+</li>
+
+<li>
+<span class="codefrag">classes/</span>
+</li>
+
+<li>
+<span class="codefrag">lib/</span>
+</li>
+
+</ul>
+
+</li>
+
+</ul>
+
+</li>
+
+</ul>
+<a name="N10056"></a><a name="top_level"></a>
+<h4>$WEBAPP_DIR/</h4>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ The top-level of the web-app, at <span class="codefrag">$WEBAPP_DIR</span> should contain
+ your JSP pages and a <span class="codefrag">Controller.jpf</span>. When built, the
+ <span class="codefrag">Controller.jpf</span> will be compiled to <span class="codefrag">WEB-INF/classes/Controller.jpf</span>.
+ </p>
+</div>
+<a name="N1006D"></a><a name="web-inf"></a>
+<h4>$WEBAPP_DIR/WEB-INF/</h4>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ The <span class="codefrag">$WEBAPP_DIR/WEB-INF/</span> directory is just as it is with any other servlet-based
+ application.
+ </p>
+</div>
+<a name="N1007B"></a><a name="web-inf_src"></a>
+<h4>$WEBAPP_DIR/WEB-INF/src/</h4>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ The <span class="codefrag">$WEBAPP_DIR/WEB-INF/src/</span> directory contains any other application
+ source files that need to be compiled into Java classes. They will be compiled
+ to <span class="codefrag">$WEBAPP_DIR/WEB-INF/classes/</span>. Additionally, any extra <span class="codefrag">.properties</span>
+ or <span class="codefrag">.xml</span> files that need to be deployed with your application will be copied
+ from the <span class="codefrag">src/</span> directory to the <span class="codefrag">classes/</span> directory during the build.
+ </p>
+</div>
+<a name="N10098"></a><a name="web-inf_lib"></a>
+<h4>$WEBAPP_DIR/WEB-INF/lib/</h4>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ As with any other web application, the <span class="codefrag">$WEBAPP_DIR/WEB-INF/lib/</span> directory
+ should contain the jars for each dependency of your application, including those
+ required by Beehive itself. The jars required by Beehive are listed below.
+ </p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+
+<tr>
+
+<th colspan="1" rowspan="1">Project</th>
+ <th colspan="1" rowspan="1">Jar</th>
+ <th colspan="1" rowspan="1">Version</th>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-controls.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-netui-compiler.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-netui-pageflow.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-netuid-scoping.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-netui-tags-databinding.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-netui-tags-html.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-netuid-template.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-tomcat-common-4x.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-tomcat-server-4x.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-tomcat-webapp-4x.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Beehive</td>
+ <td colspan="1" rowspan="1">beehive-netui-util.jar</td>
+ <td colspan="1" rowspan="1"><em>distribution</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">CGLib</td>
+ <td colspan="1" rowspan="1">cglib-full.jar</td>
+ <td colspan="1" rowspan="1">2.0.1</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Jakarta Commons</td>
+ <td colspan="1" rowspan="1">commons-beanutils</td>
+ <td colspan="1" rowspan="1">1.7.0</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Jakarta Commons</td>
+ <td colspan="1" rowspan="1">commons-collections.jar</td>
+ <td colspan="1" rowspan="1">3.0</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Jakarta Commons</td>
+ <td colspan="1" rowspan="1">commons-digester</td>
+ <td colspan="1" rowspan="1">1.6</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Jakarta Commons</td>
+ <td colspan="1" rowspan="1">commons-lang.jar</td>
+ <td colspan="1" rowspan="1">1.0.1</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Jakarta Commons</td>
+ <td colspan="1" rowspan="1">commons-logging.jar</td>
+ <td colspan="1" rowspan="1">1.0.3</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">EHCache</td>
+ <td colspan="1" rowspan="1">echache.jar</td>
+ <td colspan="1" rowspan="1">0.7</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Geronimo</td>
+ <td colspan="1" rowspan="1">geronimo-spec-jta.jar</td>
+ <td colspan="1" rowspan="1">DEV</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">HSQLDB</td>
+ <td colspan="1" rowspan="1">hsqldb.jar</td>
+ <td colspan="1" rowspan="1">1.7.2.2</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">JSTL</td>
+ <td colspan="1" rowspan="1">jstl.jar</td>
+ <td colspan="1" rowspan="1">1.1.1</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Log4J</td>
+ <td colspan="1" rowspan="1">log4j.jar</td>
+ <td colspan="1" rowspan="1">1.2.8</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Servlet API</td>
+ <td colspan="1" rowspan="1">servletapi.jar</td>
+ <td colspan="1" rowspan="1">2.4</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">JSTL <strong>is this right?</strong></td>
+ <td colspan="1" rowspan="1">standard.jar</td>
+ <td colspan="1" rowspan="1">1.1.1</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">StAX</td>
+ <td colspan="1" rowspan="1">stax.jar</td>
+ <td colspan="1" rowspan="1">1.1.1-dev</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">StAX</td>
+ <td colspan="1" rowspan="1">stax-api.jar</td>
+ <td colspan="1" rowspan="1">1.0</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">Struts</td>
+ <td colspan="1" rowspan="1">struts.jar</td>
+ <td colspan="1" rowspan="1">1.1</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">XMLBeans</td>
+ <td colspan="1" rowspan="1">xmlbeans.jar</td>
+ <td colspan="1" rowspan="1">2.0-dev-2</td>
+
+</tr>
+
+</table>
+</div>
+</div>
+
+
+<a name="N102C1"></a><a name="running_ant"></a>
+<h3>Running Ant</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Before you can build the web-app using ant, you must ensure that the <span class="codefrag">BEEHIVE_HOME</span>
+ and <span class="codefrag">CATALINA_HOME</span> variables are set correctly, along with <span class="codefrag">WEBAPP_DIR</span>.
+ </p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+
+<tr>
+
+<th colspan="1" rowspan="1">Variable</th>
+ <th colspan="1" rowspan="1">Value</th>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">BEEHIVE_HOME</td>
+ <td colspan="1" rowspan="1">Top level of the Beehive distribution</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">CATALINE_HOME</td>
+ <td colspan="1" rowspan="1">Top level of the installed Tomcat server</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">WEBAPP_DIR</td>
+ <td colspan="1" rowspan="1">Top level of the web-app to be built</td>
+
+</tr>
+
+</table>
+<p>
+ Once these variables are set correctly, building the deployable web-app
+ requires a single ant invocation using the build file at <span class="codefrag">$BEEHIVE_HOME/ant/buildWebapp.xml</span>.
+ This build-file is invoked using ant's <span class="codefrag">-f <buildfile-path></span> option.
+ The directory of the web-app is passed on the commandline using the <span class="codefrag">-Dname=value</span>
+ functionality of ant. Finally, the <span class="codefrag">build.webapp</span> target is invoked.
+ </p>
+<pre class="code">
+ant -f $BEEHIVE_HOME/ant/buildWebapp.xml -Dwebapp.dir=$WEBAPP_DIR build.webapp
+</pre>
+</div>
+
+
+<a name="N1031F"></a><a name="deploying"></a>
+<h3>Deploying the Web-app</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ The easiest way to deploy the web-app is to create a symlink/shortcut from
+ $WEBAPP_DIR to $CATALINA_HOME/webapps. Another way would be to simply copy
+ $WEBAPP_DIR to $CATALINE_HOME/webapps.
+ </p>
+<pre class="code">
+ln -s $WEBAPP_DIR $CATALINE_HOME/webapps
+</pre>
+<pre class="code">
+cp -R $WEBAPP_DIR $CATALINE_HOME/webapps
+</pre>
+</div>
+
+
+<a name="N10333"></a><a name="next"></a>
+<h3>Next...</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Now that you've built and deployed an application, you can see how easy it is to modify
+ the flow between pages, adding and removing pages.
+ </p>
+<ul>
+
+<li>
+<a href="pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+</ul>
+</div>
+
+
+<div class="attribution"></div>
+</div>
+</td><td width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<!--================= end Content==================-->
+</table>
+</td>
+</tr>
+</table>
+<!--================= end Menu, NavBar, Content ==================-->
+<!--================= start Footer ==================-->
+<table summary="footer" cellspacing="0" cellpadding="0" width="100%" border="0">
+<tr>
+<td colspan="2" height="1" bgcolor="#4C6C8F"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"><a href="../skin/images/label.gif"></a><a href="../skin/images/page.gif"></a><a href="../skin/images/chapter.gif"></a><a href="../skin/images/chapter_open.gif"></a><a href="../skin/images/current.gif"></a><a href="/favicon.ico"></a></td>
+</tr>
+<tr>
+<td colspan="2" bgcolor="#CFDCED" class="copyright" align="center"><font size="2" face="Arial, Helvetica, Sans-Serif">Copyright ©
+ 2004 The Apache Software Foundation. All rights reserved.<script type="text/javascript" language="JavaScript"><!--
+ document.write(" - "+"Last Published: " + document.lastModified);
+ // --></script></font></td>
+</tr>
+<tr>
+<td colspan="2" align="left" bgcolor="#CFDCED" class="logos"></td>
+</tr>
+</table>
+<!--================= end Footer ==================-->
+</body>
+</html>
Added: incubator/beehive/site/build/site/pageflow/pageflow_controllers.html
==============================================================================
--- (empty file)
+++ incubator/beehive/site/build/site/pageflow/pageflow_controllers.html Wed Nov 10 15:04:32 2004
@@ -0,0 +1,811 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Page Flow Controllers</title>
+<link type="text/css" href="../skin/page.css" rel="stylesheet">
+</head>
+<body text="#000000" bgcolor="#FFFFFF">
+<!--================= start Navigation Path ==================-->
+<table summary="navigation path" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td nowrap="nowrap" valign="middle" bgcolor="#CFDCED" height="20"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><!--===== breadcrumb trail (javascript-generated) ====--><font size="2" face="Arial, Helvetica, Sans-serif"><script src="../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script></font></td>
+</tr>
+<tr>
+<td bgcolor="#4C6C8F" height="2"><img height="2" width="2" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+<!--================= end Navigation Path ==================-->
+<!--================= start Banner ==================-->
+<table summary="header with logos" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<!--================= start Group Logo ==================-->
+<td bgcolor="#294563"><a href="http://incubator.apache.org/"><img border="0" class="logoImage" alt="Apache Incubator" src="../images/_incubator-logo.gif"></a></td>
+<!--================= end Group Logo ==================-->
+<!--================= start Project Logo ==================--><td width="100%" align="center" bgcolor="#294563"><a href="http://incubator.apache.org/beehive"><img border="0" class="logoImage" alt="Apache Beehive" src="../images/_beehive_logo_wide.gif"></a></td>
+<!--================= end Project Logo ==================-->
+<!--================= start Search ==================--><td valign="top" rowspan="2" bgcolor="#294563">
+<form target="_blank" action="http://www.google.com/search" method="get">
+<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
+<tr>
+<td colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="incubator.apache.org" name="sitesearch" type="hidden"><input size="15" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="Search" type="submit">
+<br>
+<font face="Arial, Helvetica, Sans-serif" size="2" color="white">
+ the Apache Beehive site
+
+
+ </font></td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td><img alt="" border="0" height="10" width="9" src="../skin/images/search-left.gif"></td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td><img alt="" border="0" height="10" width="9" src="../skin/images/search-right.gif"></td>
+</tr>
+</table>
+</form>
+</td>
+<!--================= start Search ==================--><td bgcolor="#294563"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td valign="bottom" bgcolor="#294563" colspan="2">
+<!--================= start Tabs ==================-->
+<div class="tab">
+<table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td width="6"><img alt="" height="8" width="6" src="../skin/images/spacer.gif"></td><td valign="bottom">
+<table summary="selected tab" style="height: 1.8em" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../skin/images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b><a class="base-selected" href="../index.html">Home</a></b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../skin/images/tabSel-right.gif"></td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</div>
+<!--================= end Tabs ==================-->
+</td><td bgcolor="#294563"><img alt="" width="1" height="1" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td bgcolor="#4C6C8F" colspan="4"><img width="1" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+<!--================= end Banner ==================-->
+<!--================= start Menu, NavBar, Content ==================-->
+<table summary="page content" bgcolor="#ffffff" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td valign="top">
+<table summary="menu" border="0" cellspacing="0" cellpadding="0">
+<tr>
+<!--================= start left top NavBar ==================-->
+<td rowspan="3" valign="top">
+<table summary="blue line" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td bgcolor="#CFDCED"><font color="#4C6C8F" size="4" face="Arial, Helvetica, Sans-serif"> </font></td>
+</tr>
+<tr>
+<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+</td>
+<!--================= end left top NavBar ==================--><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap" valign="top" bgcolor="#4C6C8F">
+<!--================= start Menu items ==================-->
+<div class="menu">
+<ul>
+<li>
+<font color="#CFDCED">Beehive</font>
+<ul>
+
+<li>
+<a href="../index.html">Welcome</a>
+</li>
+
+<li>
+<a href="../license.html">License</a>
+</li>
+
+<li>
+<a href="../downloads.html">Downloads</a>
+</li>
+
+<li>
+<a href="../faq.html">FAQ</a>
+</li>
+
+</ul>
+</li>
+<li>
+<font color="#CFDCED">Documentation</font>
+<ul>
+
+
+<li>
+<font color="#CFDCED">Page Flows</font>
+<ul>
+
+<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<span class="sel"><font color="#ffcc00">Page Flow Controllers</font></span>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
+<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
+</li>
+
+<li>
+<a href="../pageflow/guide.html">Page Flow Programming</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Controls</font>
+<ul>
+
+<li>
+<a href="../controls/tutorial_controls.html">Control Tutorial</a>
+</li>
+
+<li>
+<a href="../Controls.html">Control Programming</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Web Services</font>
+<ul>
+
+<li>
+<a href="../wsm/tutorial_wsm.html">Web Services Tutorial</a>
+</li>
+
+<li>
+<a href="../webservices.html">Web Services (JSR 181)</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Samples</font>
+<ul>
+
+<li>
+<a href="../jpetstore.html">Petstore</a>
+</li>
+
+<li>
+<a href="../wsm/sample_Dashboard.html">Petstore Dashboard</a>
+</li>
+
+<li>
+<a href="../wsm/sample_AddressBook.html">AddressBook/Employee</a>
+</li>
+
+<li>
+<a href="../controls/sample_controls-db.html">Database Control</a>
+</li>
+
+<li>
+<a href="../pageflow/sample_netui-blank.html">Page Flow Project</a>
+</li>
+
+<li>
+<a href="../controls/sample_controls-blank.html">Control Project</a>
+</li>
+
+<li>
+<a href="../wsm/sample_wsm-blank.html">Web Service Project</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<a href="../reference.html">Reference Docs</a>
+</li>
+
+
+
+</ul>
+</li>
+<li>
+<font color="#CFDCED">Community</font>
+<ul>
+
+<li>
+<a href="../mailinglists.html">Mailing Lists</a>
+</li>
+
+<li>
+<a href="../contributors.html">Contributors</a>
+</li>
+
+</ul>
+</li>
+</ul>
+</div>
+<!--================= end Menu items ==================-->
+</td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td valign="bottom" align="left" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-left.gif"></td><td bgcolor="#4C6C8F"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" align="right" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-right.gif"></td>
+</tr>
+<tr>
+<td height="1" bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+</td><td valign="top" width="100%">
+<table summary="content" width="100%" border="0" cellpadding="0" cellspacing="0">
+<!--================= start middle NavBar ==================-->
+<tr>
+<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td align="left" width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="left" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
+
+
+ </font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="right" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
+
+
+ </font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<!--================= end middle NavBar ==================-->
+<!--================= start Content==================-->
+<tr>
+<td align="left" width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td colspan="2" align="left" width="100%">
+<div class="content">
+<table class="title" summary="">
+<tr>
+<td valign="middle">
+<h1>Page Flow Controllers</h1>
+</td>
+</tr>
+</table>
+<ul class="minitoc">
+<li>
+<a href="#introduction">Introduction</a>
+</li>
+<li>
+<a href="#starting_the_controller">Starting the Controller</a>
+</li>
+<li>
+<a href="#fleshing_out_the_controller">Fleshing Out the Controller</a>
+<ul class="minitoc">
+<li>
+<a href="#constant_forwards">Constant Forwards</a>
+</li>
+<li>
+<a href="#conditional_forwards">Conditional Forwards</a>
+</li>
+<li>
+<a href="#handling_forms">Handling Forms</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#next">Next...</a>
+</li>
+</ul>
+
+
+<a name="N1000C"></a><a name="introduction"></a>
+<h3>Introduction</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ As introduced in the <a href="pageflow_overview.html">Page Flow Overview</a>, the
+ following model will be used.
+ </p>
+<p>
+
+<img alt="implementation page flow" src="images/impl-flow-1.png">
+ </p>
+</div>
+
+
+<a name="N10021"></a><a name="starting_the_controller"></a>
+<h3>Starting the Controller</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ The first step to writing a controller is to simply create a new basic class
+ named <span class="codefrag">Controller.jpf</span>. The <span class="codefrag">jpf</span> extension alerts the
+ build that this class is a special JPF controller class, instead of a typical
+ Java class.
+ </p>
+<pre class="code">
+
+<strong>public class Controller
+{
+}</strong>
+
+</pre>
+<p>
+ Just as the <span class="codefrag">.jpf</span> extension denotes a special Java class, controllers
+ also must subclass <span class="codefrag">org.apache.beehive.netui.pageflow.PageFlowController</span>
+
+</p>
+<pre class="code">
+
+<strong>import org.apache.beehive.netui.pageflow.PageFlowController;</strong>
+
+public class Controller
+ <strong>extends PageFlowController</strong>
+{
+}
+</pre>
+<p>
+ Additionally, Beehive weaves magic into controller classes using annotations.
+ The <span class="codefrag">Jpf.Controller</span> annotation is a required marker on your
+ own controller class.
+ </p>
+<pre class="code">
+import org.apache.beehive.netui.pageflow.PageFlowController;
+<strong>import org.apache.beehive.netui.pageflow.annotations.Jpf;</strong>
+
+<strong>@Jpf.Controller</strong>
+public class Controller
+ extends PageFlowController
+{
+}
+</pre>
+<p>
+ Now we have the beginnings of a controller implementation.
+ </p>
+</div>
+
+
+<a name="N10061"></a><a name="fleshing_out_the_controller"></a>
+<h3>Fleshing Out the Controller</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Now that the boilerplate <span class="codefrag">Controller.jpf</span> is in place, we can begin
+ to define the methods that intercept navigation and perform the necessary logic
+ to determine which JSP page should actually be displayed. In the above
+ model, these are:
+ </p>
+<ul>
+
+<li>
+<span class="codefrag">signUp()</span>
+</li>
+
+<li>
+<span class="codefrag">login()</span>
+</li>
+
+<li>
+<span class="codefrag">myPage()</span>
+</li>
+
+</ul>
+<p>
+ For the time being, we are going to ignore the methods that process form input.
+ </p>
+<p>
+ When a controller method completes, it must return an indication of what page to
+ display to the user. This is accomplished by returning a <span class="codefrag">org.apache.beehive.netui.pageflow.Forward</span>
+ object.
+ </p>
+<pre class="code">
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+ <strong>
+ public Forward signUp()
+ {
+ ...
+ }
+
+ public Forward login()
+ {
+ ...
+ }
+
+ public Forward myPage()
+ {
+ ...
+ }
+ </strong>
+}
+</pre>
+<a name="N1008D"></a><a name="constant_forwards"></a>
+<h4>Constant Forwards</h4>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ For the two simple methods of <span class="codefrag">signUp()</span> and <span class="codefrag">login()</span>,
+ there is no special logic to be applied. They should simply return a constant
+ indication to arrive at <span class="codefrag">signup.jsp</span> and <span class="codefrag">login.jsp</span>
+ respectively.
+ </p>
+<p>
+ To help with configuration and to avoid having JSP page
+ names within the body of a controller method, Beehive once
+ again uses annotations. The <span class="codefrag">Jpf.Action</span> and
+ <span class="codefrag">Jpf.Forward</span> annotations are used on each method to
+ build an <strong>name to JSP page paths</strong> mapping. The method
+ then works only in terms of the <strong>id</strong>, and doesn't
+ directly refer to the JSP page path.
+ </p>
+<p>
+ The general form the of <span class="codefrag">Jpf.Action</span>/<span class="codefrag">Jpf.Forward</span> annotations are:
+ </p>
+<pre class="code">
+@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( <strong>name="...", path="..."</strong> ),
+ @Jpf.Forward( <strong>name="...", path="..."</strong> ),
+ @Jpf.Forward( <strong>name="...", path="..."</strong> ),
+ @Jpf.Forward( <strong>name="...", path="..."</strong> )
+ }
+)
+</pre>
+<p>
+ For simple methods that forward to a constant path, only a single <span class="codefrag">Jpf.Forward</span>
+ is needed. By convention, names such as <strong>success</strong> and <strong>failure</strong>
+ are used, but by no means are required. It is good practice, though, to not simply name the
+ forward based upon the JSP page name since doing so would remove some of the decoupling that
+ Beehive applications attempt to achieve.
+ </p>
+<pre class="code">
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="signup.jsp" );
+ }
+ )</strong>
+ public Forward signUp()
+ {
+ ...
+ }
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="login.jsp" );
+ }
+ )</strong>
+ public Forward login()
+ {
+ ...
+ }
+}
+</pre>
+<p>
+ All that is left for these simple constant forward methods is a <span class="codefrag">return</span>
+ statement to return the appropriate <span class="codefrag">Forward</span> object. This is accomplished
+ simply by constructing a new <span class="codefrag">Forward</span> with the appropriate name.
+ </p>
+<pre class="code">
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="signup.jsp" );
+ }
+ )</strong>
+ public Forward signUp()
+ {
+ <strong>return new Forward( "success" );</strong>
+ }
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="login.jsp" );
+ }
+ )</strong>
+ public Forward login()
+ {
+ <strong>return new Forward( "success" );</strong>
+ }
+}
+</pre>
+</div>
+<a name="N10100"></a><a name="conditional_forwards"></a>
+<h4>Conditional Forwards</h4>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ The <span class="codefrag">myPage()</span> controller method, unlike <span class="codefrag">signUp()</span> and <span class="codefrag">login()</span>
+ contains logic to determine if the user has already authenicated himself. Unlike the previous two
+ methods, there will be two different <span class="codefrag">Jpf.Forward</span> annotations, and the job of the
+ <span class="codefrag">myPage()</span> method is to figure out which one is appropriate to return.
+ </p>
+<p>
+ We define two forwards named <strong>authenticated</strong> and <strong>not_authenticated</strong>,
+ which are linked to <span class="codefrag">mypage.jsp</span> and <span class="codefrag">login.jsp</span> respectively.
+ In this case, the determination of authentication is performed by checking a <strong>session attribute</strong>
+ to see if the <span class="codefrag">authenticated_user</span> attribute has been set.
+ Only the the <span class="codefrag">myPage()</span> method is displayed below in order to highlight condition forwards.
+ </p>
+<pre class="code">
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+
+ ...
+ ...
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="authenticated", path="mypage.jsp" );
+ @Jpf.Forward( name="not_authenticated", path="login.jsp" );
+ }
+ )</strong>
+ public Forward myPage()
+ {
+ HttpServletRequest request = getRequest();
+ HttpSession session = request.getSession();
+
+ if ( session.getAttribute( "authenticated_user" ) != null )
+ {
+ return new Forward( "authenticated" );
+ }
+
+ return new Forward( "not_authenticated" );
+ }
+}
+</pre>
+<p>
+ You may notice that the body of <span class="codefrag">myPage()</span> has no particular logic regarding
+ the user's "My Page" itself. It simply operates in terms of authentication and generically
+ named <span class="codefrag">Forward</span> objects. This presents a possibility of sharing this logic
+ with other controller methods that are concerned with authentication. For more ideas
+ along these lines, please see <!--<link href="controller_patterns.html">-->Controller Patterns [todo: forthcoming document]<!--</link>-->.
+ </p>
+</div>
+<a name="N10146"></a><a name="handling_forms"></a>
+<h4>Handling Forms</h4>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Handling form data works similar to other controller methods. By providing a parameter
+ to the controller method, a populated subclass of <span class="codefrag">org.apache.beehive.netui.pageflow.FormData</span>
+ available. In the above model, controller methods that process forms have been named
+ with the <span class="codefrag">processXXX(..)</span> convention.
+ </p>
+<ul>
+
+<li>
+<span class="codefrag">processLogin(...)</span>
+</li>
+
+<li>
+<span class="codefrag">processSignUp(...)</span>
+</li>
+
+</ul>
+<p>
+ First, define a subclass of <span class="codefrag">FormData</span>. It may be defined as a <span class="codefrag">static</span>
+ class of the controller itself. <span class="codefrag">FormData</span> classes follow normal JavaBean conventions
+ and require no special annotations.
+ </p>
+<pre class="code">
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+ <strong>public static class LoginForm
+ extends FormData
+ {
+ private String username;
+ private String password;
+
+ public void setUsername(String username)
+ {
+ this.username = username;
+ }
+
+ public String getUsername()
+ {
+ return this.username;
+ }
+
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ public String getPassword()
+ {
+ return this.password;
+ }
+ }</strong>
+
+ ...
+ ...
+
+}
+</pre>
+<p>
+ Defining the <span class="codefrag">processLogin(...)</span> method to take a <span class="codefrag">LoginForm</span>
+ parameter is all that is required to have a controller method that can
+ operate upon the submitted form.
+ </p>
+<pre class="code">
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+ <strong>public static class LoginForm
+ extends FormData
+ {
+ ...
+ ...
+ }</strong>
+
+ ...
+ ...
+
+ <strong>public Forward processLogin(LoginForm form)
+ {
+ ...
+ }</strong>
+}
+</pre>
+<p>
+ Once again, <span class="codefrag">processLogin(..)</span> is a conditional forward controller method.
+ If a user has entered a correct username and password, then they should be directed
+ to <span class="codefrag">mypage.jsp</span>, otherwise they will be returned back to the <span class="codefrag">login.jsp</span>
+ for another attempt. Checking username and password is outside of the scope of JPF,
+ and in this example, we rely upon a mythical <span class="codefrag">MyAppUtils</span> class to perform
+ this logic.
+ </p>
+<pre class="code">
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+ ...
+ ...
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="authenticated", path="mypage.jsp" );
+ @Jpf.Forward( name="not_authenticated", path="login.jsp" );
+ }
+ )</strong>
+ public Forward processLogin(LoginForm form)
+ {
+ if ( MyAppUtils.authenticate( form.getUsername(),
+ form.getPassword() ) )
+ {
+ HttpServletRequest request = getRequest();
+ HttpSession session = request.getSession();
+
+ session.setAttribute( "authenticated_user",
+ form.getUsername() );
+
+ return new Forward( "authenticated" );
+ }
+
+ return new Forward( "not_authenticated" );
+ }
+}
+</pre>
+<p>
+ Similar implementation would be done for <span class="codefrag">signUp(..)</span>, involving another
+ <span class="codefrag">FormData</span> subclass such as <span class="codefrag">SignUpForm</span>.
+ </p>
+</div>
+</div>
+
+
+<a name="N101AD"></a><a name="next"></a>
+<h3>Next...</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Next, learn about linking this controller class to the JSP pages to allow for
+ the interception to occur.
+ </p>
+<ul>
+
+<li>
+<a href="pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+</ul>
+</div>
+
+
+
+<div class="attribution"></div>
+</div>
+</td><td width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<!--================= end Content==================-->
+</table>
+</td>
+</tr>
+</table>
+<!--================= end Menu, NavBar, Content ==================-->
+<!--================= start Footer ==================-->
+<table summary="footer" cellspacing="0" cellpadding="0" width="100%" border="0">
+<tr>
+<td colspan="2" height="1" bgcolor="#4C6C8F"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"><a href="../skin/images/label.gif"></a><a href="../skin/images/page.gif"></a><a href="../skin/images/chapter.gif"></a><a href="../skin/images/chapter_open.gif"></a><a href="../skin/images/current.gif"></a><a href="/favicon.ico"></a></td>
+</tr>
+<tr>
+<td colspan="2" bgcolor="#CFDCED" class="copyright" align="center"><font size="2" face="Arial, Helvetica, Sans-Serif">Copyright ©
+ 2004 The Apache Software Foundation. All rights reserved.<script type="text/javascript" language="JavaScript"><!--
+ document.write(" - "+"Last Published: " + document.lastModified);
+ // --></script></font></td>
+</tr>
+<tr>
+<td colspan="2" align="left" bgcolor="#CFDCED" class="logos"></td>
+</tr>
+</table>
+<!--================= end Footer ==================-->
+</body>
+</html>
Added: incubator/beehive/site/build/site/pageflow/pageflow_jsp.html
==============================================================================
--- (empty file)
+++ incubator/beehive/site/build/site/pageflow/pageflow_jsp.html Wed Nov 10 15:04:32 2004
@@ -0,0 +1,635 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Page Flow JSP</title>
+<link type="text/css" href="../skin/page.css" rel="stylesheet">
+</head>
+<body text="#000000" bgcolor="#FFFFFF">
+<!--================= start Navigation Path ==================-->
+<table summary="navigation path" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td nowrap="nowrap" valign="middle" bgcolor="#CFDCED" height="20"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><!--===== breadcrumb trail (javascript-generated) ====--><font size="2" face="Arial, Helvetica, Sans-serif"><script src="../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script></font></td>
+</tr>
+<tr>
+<td bgcolor="#4C6C8F" height="2"><img height="2" width="2" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+<!--================= end Navigation Path ==================-->
+<!--================= start Banner ==================-->
+<table summary="header with logos" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<!--================= start Group Logo ==================-->
+<td bgcolor="#294563"><a href="http://incubator.apache.org/"><img border="0" class="logoImage" alt="Apache Incubator" src="../images/_incubator-logo.gif"></a></td>
+<!--================= end Group Logo ==================-->
+<!--================= start Project Logo ==================--><td width="100%" align="center" bgcolor="#294563"><a href="http://incubator.apache.org/beehive"><img border="0" class="logoImage" alt="Apache Beehive" src="../images/_beehive_logo_wide.gif"></a></td>
+<!--================= end Project Logo ==================-->
+<!--================= start Search ==================--><td valign="top" rowspan="2" bgcolor="#294563">
+<form target="_blank" action="http://www.google.com/search" method="get">
+<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
+<tr>
+<td colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="incubator.apache.org" name="sitesearch" type="hidden"><input size="15" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="Search" type="submit">
+<br>
+<font face="Arial, Helvetica, Sans-serif" size="2" color="white">
+ the Apache Beehive site
+
+
+ </font></td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td><img alt="" border="0" height="10" width="9" src="../skin/images/search-left.gif"></td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td><img alt="" border="0" height="10" width="9" src="../skin/images/search-right.gif"></td>
+</tr>
+</table>
+</form>
+</td>
+<!--================= start Search ==================--><td bgcolor="#294563"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td valign="bottom" bgcolor="#294563" colspan="2">
+<!--================= start Tabs ==================-->
+<div class="tab">
+<table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td width="6"><img alt="" height="8" width="6" src="../skin/images/spacer.gif"></td><td valign="bottom">
+<table summary="selected tab" style="height: 1.8em" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../skin/images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b><a class="base-selected" href="../index.html">Home</a></b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../skin/images/tabSel-right.gif"></td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</div>
+<!--================= end Tabs ==================-->
+</td><td bgcolor="#294563"><img alt="" width="1" height="1" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td bgcolor="#4C6C8F" colspan="4"><img width="1" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+<!--================= end Banner ==================-->
+<!--================= start Menu, NavBar, Content ==================-->
+<table summary="page content" bgcolor="#ffffff" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td valign="top">
+<table summary="menu" border="0" cellspacing="0" cellpadding="0">
+<tr>
+<!--================= start left top NavBar ==================-->
+<td rowspan="3" valign="top">
+<table summary="blue line" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td bgcolor="#CFDCED"><font color="#4C6C8F" size="4" face="Arial, Helvetica, Sans-serif"> </font></td>
+</tr>
+<tr>
+<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+</td>
+<!--================= end left top NavBar ==================--><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap" valign="top" bgcolor="#4C6C8F">
+<!--================= start Menu items ==================-->
+<div class="menu">
+<ul>
+<li>
+<font color="#CFDCED">Beehive</font>
+<ul>
+
+<li>
+<a href="../index.html">Welcome</a>
+</li>
+
+<li>
+<a href="../license.html">License</a>
+</li>
+
+<li>
+<a href="../downloads.html">Downloads</a>
+</li>
+
+<li>
+<a href="../faq.html">FAQ</a>
+</li>
+
+</ul>
+</li>
+<li>
+<font color="#CFDCED">Documentation</font>
+<ul>
+
+
+<li>
+<font color="#CFDCED">Page Flows</font>
+<ul>
+
+<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<span class="sel"><font color="#ffcc00">Page Flow JSP</font></span>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
+<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
+</li>
+
+<li>
+<a href="../pageflow/guide.html">Page Flow Programming</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Controls</font>
+<ul>
+
+<li>
+<a href="../controls/tutorial_controls.html">Control Tutorial</a>
+</li>
+
+<li>
+<a href="../Controls.html">Control Programming</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Web Services</font>
+<ul>
+
+<li>
+<a href="../wsm/tutorial_wsm.html">Web Services Tutorial</a>
+</li>
+
+<li>
+<a href="../webservices.html">Web Services (JSR 181)</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Samples</font>
+<ul>
+
+<li>
+<a href="../jpetstore.html">Petstore</a>
+</li>
+
+<li>
+<a href="../wsm/sample_Dashboard.html">Petstore Dashboard</a>
+</li>
+
+<li>
+<a href="../wsm/sample_AddressBook.html">AddressBook/Employee</a>
+</li>
+
+<li>
+<a href="../controls/sample_controls-db.html">Database Control</a>
+</li>
+
+<li>
+<a href="../pageflow/sample_netui-blank.html">Page Flow Project</a>
+</li>
+
+<li>
+<a href="../controls/sample_controls-blank.html">Control Project</a>
+</li>
+
+<li>
+<a href="../wsm/sample_wsm-blank.html">Web Service Project</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<a href="../reference.html">Reference Docs</a>
+</li>
+
+
+
+</ul>
+</li>
+<li>
+<font color="#CFDCED">Community</font>
+<ul>
+
+<li>
+<a href="../mailinglists.html">Mailing Lists</a>
+</li>
+
+<li>
+<a href="../contributors.html">Contributors</a>
+</li>
+
+</ul>
+</li>
+</ul>
+</div>
+<!--================= end Menu items ==================-->
+</td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td valign="bottom" align="left" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-left.gif"></td><td bgcolor="#4C6C8F"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" align="right" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-right.gif"></td>
+</tr>
+<tr>
+<td height="1" bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+</td><td valign="top" width="100%">
+<table summary="content" width="100%" border="0" cellpadding="0" cellspacing="0">
+<!--================= start middle NavBar ==================-->
+<tr>
+<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td align="left" width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="left" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
+
+
+ </font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="right" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
+
+
+ </font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<!--================= end middle NavBar ==================-->
+<!--================= start Content==================-->
+<tr>
+<td align="left" width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td colspan="2" align="left" width="100%">
+<div class="content">
+<table class="title" summary="">
+<tr>
+<td valign="middle">
+<h1>Page Flow JSP</h1>
+</td>
+</tr>
+</table>
+<ul class="minitoc">
+<li>
+<a href="#introduction">Introduction</a>
+</li>
+<li>
+<a href="#starting_a_jpf_jsp">Starting a JPF JSP</a>
+</li>
+<li>
+<a href="#simple_linking">Simple Linking</a>
+</li>
+<li>
+<a href="#handling_forms">Handling Forms</a>
+</li>
+<li>
+<a href="#next">Next...</a>
+</li>
+</ul>
+
+
+<a name="N1000C"></a><a name="introduction"></a>
+<h3>Introduction</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Continuing with the same model used in previous pages of this documentation set,
+ examples will reference this:
+ </p>
+<p>
+
+<img alt="implementation flow" src="images/impl-flow-1.png">
+ </p>
+<p>
+ Java Page Flow adds a handful of tag libraries to normal JSP usage to assist with the
+ binding of the JSP pages to the controller class. Of primary importance is the
+ <span class="codefrag">netui/tags-html</span> taglib. Other taglibs provide additional functionality
+ </p>
+</div>
+
+
+<a name="N10023"></a><a name="starting_a_jpf_jsp"></a>
+<h3>Starting a JPF JSP</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ As with <a href="pageflow_controllers.html">Page Flow Controller</a>, a certain amount
+ of common boilerplate text is required in each page. The first two lines should set
+ the content-type, the encoding, and import the base netui tag library. The <span class="codefrag">taglib</span>
+ binds the netui tags to the <span class="codefrag">netui</span> prefix.
+ </p>
+<pre class="code">
+
+<strong><%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://beehive.apache.org/netui/tags-html-1.0" prefix="netui"%></strong>
+
+</pre>
+<p>
+ After the common prolog, the JSP page can be written like most any other JSP page,
+ with some tag substitutions occurring:
+ </p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+
+<tr>
+
+<th colspan="1" rowspan="1">original tag</th><th colspan="1" rowspan="1">replace with</th>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">html</td><td colspan="1" rowspan="1">netui:html</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">body</td><td colspan="1" rowspan="1">netui:body</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">a</td><td colspan="1" rowspan="1">netui:anchor</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">form</td><td colspan="1" rowspan="1">netui:form</td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1"><em>various form elements</em></td><td colspan="1" rowspan="1"><em>various netui: elements</em> (see <a href="#handling_forms">Handling Forms</a>, below)</td>
+
+</tr>
+
+</table>
+<p>
+ In addition to the prolog and general tag substitutions, <span class="codefrag"><netui:base></span>
+ should be present within the <span class="codefrag"><head></span> element. The resulting general
+ form of a JPF-based JSP page is as follows:
+ </p>
+<pre class="code">
+
+<strong><%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://beehive.apache.org/netui/tags-html-1.0" prefix="netui"%>
+<netui:html></strong>
+ <head>
+ <title>...title>
+ <strong><netui:base/></strong>
+ <head>
+ <strong><netui:body></strong>
+ ..
+ ..
+ ..
+ <strong><netui:body>
+<netui:html></strong>
+
+</pre>
+</div>
+
+
+<a name="N100AE"></a><a name="simple_linking"></a>
+<h3>Simple Linking</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Initially, we will examine simple linking through a controller to another JSP page.
+ The <span class="codefrag"><netui:anchor></span> tag replaces the normal <span class="codefrag"><a></span>
+ HTML anchor tag. A plain <span class="codefrag"><a></span> links directly from one URL to
+ another, without providing the controller an opportunity to perform any conditional
+ logic. The <span class="codefrag"><netui:anchor></span> tag will be substituted when the
+ page is display to render the correct HTML and Javascript to cause the link
+ to venture through the controller class.
+ </p>
+<p>
+ While it may seem silly to use JPF/netui functionality for simple
+ <em>constant forward methods</em>, the advantage is that if a page
+ gets renamed or you wish to change the flow through an application,
+ the destination only needs to be changed once, within the controller.
+ Otherwise, you may have to edit a handful of JSP pages manually
+ changing the URLs inside normal <span class="codefrag"><a></span> tags.
+ </p>
+<p>
+ For example, if your application changes and you desire to show a
+ terms-of-service before allowing login, you can simply alter the <span class="codefrag">login()</span>
+ controller method to send a user to <span class="codefrag">terms_of_service.jsp</span> before
+ further sending him to the actual login screen.
+ </p>
+<p>
+ The <span class="codefrag"><netui:anchor></span> tag parallels the <span class="codefrag"><a></span>
+ tag but uses a <span class="codefrag">action</span> attribute instead of an <span class="codefrag">href</span>.
+ Instead of specifying the URL to another page, the name of the method
+ on the controller class is used, without parenthesis.
+ </p>
+<p>
+ Instead of using <span class="codefrag"><a></span>
+
+</p>
+<pre class="code">
+<<strong>a href="login.jsp"</strong>>Login!</a>
+</pre>
+<p>
+ Use <span class="codefrag"><netui:anchor></span>
+
+</p>
+<pre class="code">
+<<strong>netui:anchor action="login"</strong>>Login!</a>
+</pre>
+<p>
+ When the link is displayed on-screen, clicking it will cause control to
+ go through the <span class="codefrag">Controller</span>'s <span class="codefrag">login()</span> method,
+ which will return the correct forward to select the actual next page to
+ display.
+ </p>
+</div>
+
+
+<a name="N1010A"></a><a name="handling_forms"></a>
+<h3>Handling Forms</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ To connect an on-screen form to the underlying controller's form-handling
+ method, the <span class="codefrag"><netui:form></span> container tag, along with
+ specialized tags that replace the normal form elements are used within
+ a JSP page. Similar to how <span class="codefrag"><netui:anchor></span> replaces
+ normal HTML <span class="codefrag"><a></span> tags, the <span class="codefrag"><netui:form></span>
+ tag replaces the typical HTML <span class="codefrag"><form></span> tag. Once again,
+ the tag will render the appropriate page so that submission of the form
+ will venture through the named form-handling method of the controller class.
+ </p>
+<p>
+ Instead of using <span class="codefrag"><form></span>
+
+</p>
+<pre class="code">
+<<strong>form action="LoginServlet"</strong> method="POST">
+</pre>
+<p>
+ Use <span class="codefrag"><netui:form></span>
+
+</p>
+<pre class="code">
+<<strong>netui:form action="processLogin"</strong> method="POST">
+</pre>
+<p>
+ The other tags typically used with a <span class="codefrag"><form></span> also have
+ replacements from the netui tag library.
+ </p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+
+<tr>
+
+<th colspan="1" rowspan="1">original tag</th><th colspan="1" rowspan="1">replace with</th><th colspan="1" rowspan="1"><span class="codefrag">FormData</span> datatype</th>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">button</td><td colspan="1" rowspan="1">netui:button</td><td colspan="1" rowspan="1"><em>optionally changing the controller form processing method</em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">input type="checkbox"</td><td colspan="1" rowspan="1">netui:checkBox</td><td colspan="1" rowspan="1"><span class="codefrag">boolean</span> or <span class="codefrag">java.lang.Boolean</span></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">input type="checkbox"</td><td colspan="1" rowspan="1">netui:checkBoxGroup</td><td colspan="1" rowspan="1"><span class="codefrag">java.lang.String[]</span></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">input type="checkbox"</td><td colspan="1" rowspan="1">netui:checkBoxOption</td><td colspan="1" rowspan="1"><em>see <span class="codefrag">netui:checkBoxGroup</span></em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">hidden</td><td colspan="1" rowspan="1">netui:hidden</td><td colspan="1" rowspan="1"><span class="codefrag">java.lang.String</span></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">input type="radio"</td><td colspan="1" rowspan="1">netui:radioButtonGroup</td><td colspan="1" rowspan="1"><span class="codefrag">java.lang.String[]</span></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">input type="radio"</td><td colspan="1" rowspan="1">netui:radioButtonOption</td><td colspan="1" rowspan="1"><em>see <span class="codefrag">netui:radioButtonGroup</span></em></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">input type="radio"</td><td colspan="1" rowspan="1">netui:select</td><td colspan="1" rowspan="1"><span class="codefrag">java.lang.String[]</span></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">option</td><td colspan="1" rowspan="1">netui:option</td><td colspan="1" rowspan="1">see <span class="codefrag">netui:option</span></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">textarea</td><td colspan="1" rowspan="1">netui:textArea</td><td colspan="1" rowspan="1"><span class="codefrag">java.lang.String</span></td>
+
+</tr>
+
+<tr>
+
+<td colspan="1" rowspan="1">input (type="text")</td><td colspan="1" rowspan="1">netui:textBox</td><td colspan="1" rowspan="1"><span class="codefrag">java.lang.String</span></td>
+
+</tr>
+
+</table>
+<p>
+ For the <span class="codefrag">processLogin(...)</span> form-processing method, the matching JSP form would be:
+ </p>
+<pre class="code">
+
+<strong><netui:form action="processLogin" method="POST">
+ <netui:textBox name="username" size="20"/>
+ <netui:textBox name="username" size="20" password="true"/>
+ <netui:button type="submit" value="Login"/>
+</netui:form></strong>
+
+</pre>
+<p>
+ When the user submits the form by clicking upon the <span class="codefrag">Login</span> button, an instance of
+ the <span class="codefrag">LoginForm</span> subclass of <span class="codefrag">FormData</span> is created and passed to the
+ <span class="codefrag">processLogin(LoginForm form)</span> method of the controller class.
+ </p>
+</div>
+
+
+<a name="N1023A"></a><a name="next"></a>
+<h3>Next...</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Next, learn about how to compile and package up a complete web-app.
+ </p>
+<ul>
+
+<li>
+<a href="pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+</ul>
+</div>
+
+
+
+<div class="attribution"></div>
+</div>
+</td><td width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<!--================= end Content==================-->
+</table>
+</td>
+</tr>
+</table>
+<!--================= end Menu, NavBar, Content ==================-->
+<!--================= start Footer ==================-->
+<table summary="footer" cellspacing="0" cellpadding="0" width="100%" border="0">
+<tr>
+<td colspan="2" height="1" bgcolor="#4C6C8F"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"><a href="../skin/images/label.gif"></a><a href="../skin/images/page.gif"></a><a href="../skin/images/chapter.gif"></a><a href="../skin/images/chapter_open.gif"></a><a href="../skin/images/current.gif"></a><a href="/favicon.ico"></a></td>
+</tr>
+<tr>
+<td colspan="2" bgcolor="#CFDCED" class="copyright" align="center"><font size="2" face="Arial, Helvetica, Sans-Serif">Copyright ©
+ 2004 The Apache Software Foundation. All rights reserved.<script type="text/javascript" language="JavaScript"><!--
+ document.write(" - "+"Last Published: " + document.lastModified);
+ // --></script></font></td>
+</tr>
+<tr>
+<td colspan="2" align="left" bgcolor="#CFDCED" class="logos"></td>
+</tr>
+</table>
+<!--================= end Footer ==================-->
+</body>
+</html>
Added: incubator/beehive/site/build/site/pageflow/pageflow_overview.html
==============================================================================
--- (empty file)
+++ incubator/beehive/site/build/site/pageflow/pageflow_overview.html Wed Nov 10 15:04:32 2004
@@ -0,0 +1,525 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Page Flow Overview</title>
+<link type="text/css" href="../skin/page.css" rel="stylesheet">
+</head>
+<body text="#000000" bgcolor="#FFFFFF">
+<!--================= start Navigation Path ==================-->
+<table summary="navigation path" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td nowrap="nowrap" valign="middle" bgcolor="#CFDCED" height="20"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><!--===== breadcrumb trail (javascript-generated) ====--><font size="2" face="Arial, Helvetica, Sans-serif"><script src="../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script></font></td>
+</tr>
+<tr>
+<td bgcolor="#4C6C8F" height="2"><img height="2" width="2" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+<!--================= end Navigation Path ==================-->
+<!--================= start Banner ==================-->
+<table summary="header with logos" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<!--================= start Group Logo ==================-->
+<td bgcolor="#294563"><a href="http://incubator.apache.org/"><img border="0" class="logoImage" alt="Apache Incubator" src="../images/_incubator-logo.gif"></a></td>
+<!--================= end Group Logo ==================-->
+<!--================= start Project Logo ==================--><td width="100%" align="center" bgcolor="#294563"><a href="http://incubator.apache.org/beehive"><img border="0" class="logoImage" alt="Apache Beehive" src="../images/_beehive_logo_wide.gif"></a></td>
+<!--================= end Project Logo ==================-->
+<!--================= start Search ==================--><td valign="top" rowspan="2" bgcolor="#294563">
+<form target="_blank" action="http://www.google.com/search" method="get">
+<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
+<tr>
+<td colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="incubator.apache.org" name="sitesearch" type="hidden"><input size="15" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="Search" type="submit">
+<br>
+<font face="Arial, Helvetica, Sans-serif" size="2" color="white">
+ the Apache Beehive site
+
+
+ </font></td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td><img alt="" border="0" height="10" width="9" src="../skin/images/search-left.gif"></td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td><img alt="" border="0" height="10" width="9" src="../skin/images/search-right.gif"></td>
+</tr>
+</table>
+</form>
+</td>
+<!--================= start Search ==================--><td bgcolor="#294563"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td valign="bottom" bgcolor="#294563" colspan="2">
+<!--================= start Tabs ==================-->
+<div class="tab">
+<table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td width="6"><img alt="" height="8" width="6" src="../skin/images/spacer.gif"></td><td valign="bottom">
+<table summary="selected tab" style="height: 1.8em" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../skin/images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b><a class="base-selected" href="../index.html">Home</a></b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../skin/images/tabSel-right.gif"></td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</div>
+<!--================= end Tabs ==================-->
+</td><td bgcolor="#294563"><img alt="" width="1" height="1" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td bgcolor="#4C6C8F" colspan="4"><img width="1" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+<!--================= end Banner ==================-->
+<!--================= start Menu, NavBar, Content ==================-->
+<table summary="page content" bgcolor="#ffffff" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td valign="top">
+<table summary="menu" border="0" cellspacing="0" cellpadding="0">
+<tr>
+<!--================= start left top NavBar ==================-->
+<td rowspan="3" valign="top">
+<table summary="blue line" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td bgcolor="#CFDCED"><font color="#4C6C8F" size="4" face="Arial, Helvetica, Sans-serif"> </font></td>
+</tr>
+<tr>
+<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+</td>
+<!--================= end left top NavBar ==================--><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap" valign="top" bgcolor="#4C6C8F">
+<!--================= start Menu items ==================-->
+<div class="menu">
+<ul>
+<li>
+<font color="#CFDCED">Beehive</font>
+<ul>
+
+<li>
+<a href="../index.html">Welcome</a>
+</li>
+
+<li>
+<a href="../license.html">License</a>
+</li>
+
+<li>
+<a href="../downloads.html">Downloads</a>
+</li>
+
+<li>
+<a href="../faq.html">FAQ</a>
+</li>
+
+</ul>
+</li>
+<li>
+<font color="#CFDCED">Documentation</font>
+<ul>
+
+
+<li>
+<font color="#CFDCED">Page Flows</font>
+<ul>
+
+<li>
+<span class="sel"><font color="#ffcc00">Page Flow Overview</font></span>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
+<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
+</li>
+
+<li>
+<a href="../pageflow/guide.html">Page Flow Programming</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Controls</font>
+<ul>
+
+<li>
+<a href="../controls/tutorial_controls.html">Control Tutorial</a>
+</li>
+
+<li>
+<a href="../Controls.html">Control Programming</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Web Services</font>
+<ul>
+
+<li>
+<a href="../wsm/tutorial_wsm.html">Web Services Tutorial</a>
+</li>
+
+<li>
+<a href="../webservices.html">Web Services (JSR 181)</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<font color="#CFDCED">Samples</font>
+<ul>
+
+<li>
+<a href="../jpetstore.html">Petstore</a>
+</li>
+
+<li>
+<a href="../wsm/sample_Dashboard.html">Petstore Dashboard</a>
+</li>
+
+<li>
+<a href="../wsm/sample_AddressBook.html">AddressBook/Employee</a>
+</li>
+
+<li>
+<a href="../controls/sample_controls-db.html">Database Control</a>
+</li>
+
+<li>
+<a href="../pageflow/sample_netui-blank.html">Page Flow Project</a>
+</li>
+
+<li>
+<a href="../controls/sample_controls-blank.html">Control Project</a>
+</li>
+
+<li>
+<a href="../wsm/sample_wsm-blank.html">Web Service Project</a>
+</li>
+
+</ul>
+</li>
+
+<li>
+<a href="../reference.html">Reference Docs</a>
+</li>
+
+
+
+</ul>
+</li>
+<li>
+<font color="#CFDCED">Community</font>
+<ul>
+
+<li>
+<a href="../mailinglists.html">Mailing Lists</a>
+</li>
+
+<li>
+<a href="../contributors.html">Contributors</a>
+</li>
+
+</ul>
+</li>
+</ul>
+</div>
+<!--================= end Menu items ==================-->
+</td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td valign="bottom" align="left" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-left.gif"></td><td bgcolor="#4C6C8F"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" align="right" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-right.gif"></td>
+</tr>
+<tr>
+<td height="1" bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+</table>
+</td><td valign="top" width="100%">
+<table summary="content" width="100%" border="0" cellpadding="0" cellspacing="0">
+<!--================= start middle NavBar ==================-->
+<tr>
+<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td align="left" width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="left" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
+
+
+ </font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="right" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
+
+
+ </font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<tr>
+<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<!--================= end middle NavBar ==================-->
+<!--================= start Content==================-->
+<tr>
+<td align="left" width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td colspan="2" align="left" width="100%">
+<div class="content">
+<table class="title" summary="">
+<tr>
+<td valign="middle">
+<h1>Page Flow Overview</h1>
+</td>
+</tr>
+</table>
+<ul class="minitoc">
+<li>
+<a href="#introduction">Introduction</a>
+</li>
+<li>
+<a href="#logical_flow">The Logical Flow</a>
+</li>
+<li>
+<a href="#implementation_of_flow">The Implementation of the Flow</a>
+</li>
+<li>
+<a href="#next">Next...</a>
+</li>
+</ul>
+
+
+<a name="N1000C"></a><a name="introduction"></a>
+<h3>Introduction</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ A Java Page Flow (JPF) is a group of Java Server Pages (JSP) and a Java class that
+ controls the user experience flow through an application. In addition to allowing
+ complex logic to dictate which pages are displayed, JPF technology helps decouple
+ page authoring from application logic by preventing one JSP from directly referencing
+ another.
+ </p>
+</div>
+
+
+<a name="N10016"></a><a name="logical_flow"></a>
+<h3>The Logical Flow</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Writing traditional web applications without JPFs requires a fair amount of
+ logic to be applied within the application's pages. For example, a site
+ that provides a "My Page" functionality for logged in users would have
+ to include logic on the home page to determine if the "My Page" link
+ should take the user to the login form or directly to their customized
+ page.
+ </p>
+<p>
+ Using JPF, the home page of the application would not link directly to
+ either the login page <strong>or</strong> the user's "My Page" location, but rather
+ would point back into Java code that makes the decision.
+ </p>
+<p>
+ For the rest of this overview, the following <strong>logical page flow</strong> wil
+ be used:
+ </p>
+<p>
+
+<img alt="logical page flow" src="images/logical-flow-1.png">
+ </p>
+<p>
+ This flow supports several routes from the home page of the application
+ to the user's "My Page":
+ </p>
+<ol>
+
+<li>
+
+<p>
+
+<span class="codefrag">index.jsp</span> directly to <span class="codefrag">mypage.jsp</span> if the user is already logged in.
+ </p>
+
+</li>
+
+<li>
+
+<p>
+
+<span class="codefrag">index.jsp</span> to <span class="codefrag">login.jsp</span> if the user explicitely selects the 'login' action.
+ After logging in, the user will be automatically taken to <span class="codefrag">mypage.jsp</span>.
+ </p>
+
+
+<p>
+ In the event of a login failure, <span class="codefrag">login.jsp</span> will be redisplayed to give them
+ another opportunity to authenticate themselves.
+ </p>
+
+</li>
+
+<li>
+
+<p>
+ If the user desires to register with the site, he can select the action that will
+ take him to <span class="codefrag">signup.jsp</span>. One signed up, the <span class="codefrag">thanks.jsp</span>
+ will be displayed which also allows the user to follow the path outlined in #2
+ above to login.
+ </p>
+
+</li>
+
+<li>
+
+<p>
+ In the event a user has already authenticated himself, he will be allowed to
+ go directly to his "My Page" at <span class="codefrag">mypage.jsp</span>.
+ </p>
+
+</li>
+
+</ol>
+</div>
+
+
+<a name="N1006F"></a><a name="implementation_of_flow"></a>
+<h3>The Implementation of the Flow</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ In the above <strong>logical flow</strong> there are several <em>if</em> statements
+ that cause the user flow to vary depending on their previous actions and other state.
+ </p>
+<ul>
+
+<li>
+
+<em>If the user is not logged in...</em>
+
+</li>
+
+<li>
+
+<em>If the user is logged in...</em>
+
+</li>
+
+<li>
+
+<em>If the user's login attempt fails...</em>
+
+</li>
+
+</ul>
+<p>
+ Java Page Flows moves this condition logic out of the JSP pages and into a
+ Java class that controls the movement through the application. This Java class
+ is the <strong>controller</strong> portion of the <strong>Model-View-Controller</strong>
+ (MVC) pattern. This allows a page to be written, for example, that appears
+ to link directly from the home page of the application to the user's "My Page".
+ The <strong>controller</strong> is given the opportunity to intercept the navigation
+ between the two and redirect the user to the login page, if required.
+ </p>
+<p>
+ Each of the interception points is simply a <strong>method</strong> of the
+ particular <strong>controller</strong> class. The method may perform any required
+ complex logic. The return-value of the method dictates which page is then
+ displayed. If a user clicks on the "My Page" link, the method may check if
+ the user is logged in, and if so, return an indication that the <span class="codefrag">mypage.jsp</span>
+ should be displayed, otherwise it will return an indication that
+ <span class="codefrag">login.jsp</span> should be presented to the user.
+ </p>
+<p>
+ With normal HTML pages, each page is linked directly to other pages.
+ </p>
+<ul>
+
+<li>
+<strong>page > page > page > page</strong>
+</li>
+
+</ul>
+<p>
+ When using JPFs, pages and controller methods are interleaved, transparently.
+ </p>
+<ul>
+
+<li>
+<strong>page > method > page > method > page > method > page</strong>
+</li>
+
+</ul>
+<p>
+ The above <strong>logical page flow</strong> can be redrawn with JPF controller methods
+ in mind, as:
+ </p>
+<p>
+
+<img alt="implementation page flow" src="images/impl-flow-1.png">
+ </p>
+<p>
+ Now it is apparent that to navigation from <span class="codefrag">index.jsp</span> to <span class="codefrag">mypage.jsp</span>,
+ the user traverses across the <span class="codefrag">myPage()</span> method. This method performs the necessary
+ check to determine if the user has already been authenticated. If the user has logged in already,
+ it will direct the user straight to <span class="codefrag">mypage.jsp</span>, otherwise, it displays <span class="codefrag">login.jsp</span>.
+ </p>
+</div>
+
+
+<a name="N100E2"></a><a name="next"></a>
+<h3>Next...</h3>
+<div style="margin-left: 0 ; border: 2px">
+<p>
+ Next, learn about writing a <strong>controller</strong> class with methods.
+ </p>
+<ul>
+
+<li>
+<a href="pageflow_controllers.html">Page Flow Controller</a>
+</li>
+
+</ul>
+</div>
+
+
+
+
+<div class="attribution"></div>
+</div>
+</td><td width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
+</tr>
+<!--================= end Content==================-->
+</table>
+</td>
+</tr>
+</table>
+<!--================= end Menu, NavBar, Content ==================-->
+<!--================= start Footer ==================-->
+<table summary="footer" cellspacing="0" cellpadding="0" width="100%" border="0">
+<tr>
+<td colspan="2" height="1" bgcolor="#4C6C8F"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"><a href="../skin/images/label.gif"></a><a href="../skin/images/page.gif"></a><a href="../skin/images/chapter.gif"></a><a href="../skin/images/chapter_open.gif"></a><a href="../skin/images/current.gif"></a><a href="/favicon.ico"></a></td>
+</tr>
+<tr>
+<td colspan="2" bgcolor="#CFDCED" class="copyright" align="center"><font size="2" face="Arial, Helvetica, Sans-Serif">Copyright ©
+ 2004 The Apache Software Foundation. All rights reserved.<script type="text/javascript" language="JavaScript"><!--
+ document.write(" - "+"Last Published: " + document.lastModified);
+ // --></script></font></td>
+</tr>
+<tr>
+<td colspan="2" align="left" bgcolor="#CFDCED" class="logos"></td>
+</tr>
+</table>
+<!--================= end Footer ==================-->
+</body>
+</html>
Modified: incubator/beehive/site/build/site/pageflow/sample_netui-blank.html
==============================================================================
--- incubator/beehive/site/build/site/pageflow/sample_netui-blank.html (original)
+++ incubator/beehive/site/build/site/pageflow/sample_netui-blank.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/pageflow/tutorial_pageflow.html
==============================================================================
--- incubator/beehive/site/build/site/pageflow/tutorial_pageflow.html (original)
+++ incubator/beehive/site/build/site/pageflow/tutorial_pageflow.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<span class="sel"><font color="#ffcc00">Page Flow Tutorial</font></span>
</li>
Modified: incubator/beehive/site/build/site/reference.html
==============================================================================
--- incubator/beehive/site/build/site/reference.html (original)
+++ incubator/beehive/site/build/site/reference.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/webservices.html
==============================================================================
--- incubator/beehive/site/build/site/webservices.html (original)
+++ incubator/beehive/site/build/site/webservices.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/wsm/sample_AddressBook.html
==============================================================================
--- incubator/beehive/site/build/site/wsm/sample_AddressBook.html (original)
+++ incubator/beehive/site/build/site/wsm/sample_AddressBook.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/wsm/sample_Dashboard.html
==============================================================================
--- incubator/beehive/site/build/site/wsm/sample_Dashboard.html (original)
+++ incubator/beehive/site/build/site/wsm/sample_Dashboard.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/wsm/sample_wsm-blank.html
==============================================================================
--- incubator/beehive/site/build/site/wsm/sample_wsm-blank.html (original)
+++ incubator/beehive/site/build/site/wsm/sample_wsm-blank.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Modified: incubator/beehive/site/build/site/wsm/tutorial_wsm.html
==============================================================================
--- incubator/beehive/site/build/site/wsm/tutorial_wsm.html (original)
+++ incubator/beehive/site/build/site/wsm/tutorial_wsm.html Wed Nov 10 15:04:32 2004
@@ -127,6 +127,26 @@
<ul>
<li>
+<a href="../pageflow/pageflow_overview.html">Page Flow Overview</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_controllers.html">Page Flow Controllers</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_jsp.html">Page Flow JSP</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_building.html">Building a Page Flow Web-App</a>
+</li>
+
+<li>
+<a href="../pageflow/pageflow_altering.html">Altering a Page Flow</a>
+</li>
+
+<li>
<a href="../pageflow/tutorial_pageflow.html">Page Flow Tutorial</a>
</li>
Added: incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_altering.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_altering.xml Wed Nov 10 15:04:32 2004
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "http://forrest.apache.org/dtd/document-v12.dtd">
+<document>
+ <header>
+ <title>Altering a Page Flow</title>
+ </header>
+ <body>
+
+ <section id="introduction">
+ <title>Introduction</title>
+
+ <p>
+ In the previous pages, you were shown how to stitch together a controller class
+ and a set of JSP pages. One of the most powerful features of the Beehive way
+ of building applications is being able to change the flow by editing only the
+ controller class file, without having to touch the JSP pages.
+ </p>
+
+ </section>
+
+ <section id="logical_flow_change">
+ <title>Logical Flow Change</title>
+
+ <p>
+ Sometime after deploying the application, it is decided that before allowing a
+ user to login, they must first be presented a page describing the terms of
+ service for using the application. Additionally, a decision is made to have
+ the "Sign Up" action automatically log-in the new user so they don't have
+ to traverse the login screen.
+ </p>
+
+ <p>
+ The original logical flow looked like this:
+ </p>
+
+ <p>
+ <img src="images/logical-flow-1.png" alt="logical flow, before alteration"/>
+ </p>
+
+ <p>
+ After these changes, the logical flow now resembles:
+ </p>
+
+ <p>
+ <img src="images/logical-flow-2.png" alt="logical flow, after alteration"/>
+ </p>
+
+ </section>
+
+ <section id="impl_flow_change">
+ <title>Implementation Flow Change</title>
+
+ <p>
+ To accomodate the new logical flow, the implementation flow model originally looked like this:
+ </p>
+
+ <p>
+ <img src="images/impl-flow-1.png" alt="logical flow, after alteration"/>
+ </p>
+
+ <p>
+ After removing <code>thanks.jsp</code>, adding <code>terms.jsp</code>, adding an
+ <code>acceptTerms()</code> method, and re-routing the post-signup flow, looks like:
+ </p>
+
+ <p>
+ <img src="images/impl-flow-2.png" alt="logical flow, after alteration"/>
+ </p>
+
+ </section>
+
+ <section id="changes_to_jsp">
+ <title>Changes Required in the JSPs</title>
+
+ <p>
+ Strictly speaking, no changes to JSP content are required. Only deletion of the
+ unused <code>thanks.jsp</code> and creation of the <code>terms.jsp</code> is
+ all that is required.
+ </p>
+
+ <p>
+ <strong>Note:</strong>, The <code>signup.jsp</code> page
+ that previously would direct a user to <code>thanks.jsp</code> but will now
+ send him to <code>mypage.jsp</code> requires <em>absolutely no changes</em>.
+ </p>
+
+ <p>
+ The <code>terms.jsp</code> page would include a link through a new <code>acceptTerms()</code>
+ controller method, similar to:
+ </p>
+<source>
+ <netui:anchor action="acceptTerms">Accept these Terms of Service</netui:anchor>
+</source>
+
+ </section>
+
+ <section id="changes_to_controller">
+ <title>Changes Required in the Controller Class</title>
+
+ <p>
+ To change the flow, a few simple edits of the controller class are all that is required.
+ </p>
+
+ <section id="redirecting_login">
+ <title>Redirect <code>login()</code></title>
+
+ <p>
+ Previous, the <code>login()</code> controller method was defined to statically
+ return the forward to <code>login.jsp</code>.
+ </p>
+
+<source>
+ @Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="<strong>login.jsp</strong>" );
+ }
+ )
+ public Forward login()
+ {
+ return new Forward( "success" );
+ }
+</source>
+
+ <p>
+ By changing the <code>path</code> property of the <code>Jpf.Forward</code> associated
+ with this page, all links that previously took the user to <code>login.jsp</code> will
+ now direct him to <code>terms.jsp</code>.
+ </p>
+
+<source>
+ @Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="<strong>terms.jsp</strong>" );
+ }
+ )
+ public Forward login()
+ {
+ return new Forward( "success" );
+ }
+</source>
+
+ <p>
+ The <code>terms.jsp</code> page links through a new <code>acceptTerms()</code>
+ controller method which simply is a static forward to <code>login.jsp</code>.
+ </p>
+
+<source>
+ @Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="login.jsp" );
+ }
+ )
+ public Forward acceptTerms()
+ {
+ return new Forward( "success" );
+ }
+</source>
+
+ <p>
+ This biggest change in the controller class is in the <code>processSignUp()</code>
+ controller method. Instead of just recording the user's information, it now must
+ also perform the logic of logging in the user automatically. Additionally, the
+ forward returned by it will send the user directly to <code>mypage.jsp</code>
+ instead of the not-unused <code>thanks.jsp</code> page.
+ </p>
+
+<source>
+ @Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="<strong>mypage.jsp</strong>" );
+ }
+ )
+ public Forward processSignUp(SignUpForm form)
+ {
+ // record the user's sign-up information.
+
+ ...
+ ...
+
+ // perform automatic login for the user.
+
+ HttpServletRequest request = getRequest();
+ HttpSession session = request.getSession();
+
+ session.setAttribute( "authenticated_user",
+ form.getUsername() );
+
+ return new Forward( "success" );
+ }
+</source>
+
+ <p>
+ The flow has successfully be altered to now include a jump through the site's
+ terms-of-service and automatically logging-in newly signed-up users.
+ </p>
+
+ </section>
+
+ </section>
+
+
+
+
+ </body>
+ <footer>
+ <legal>
+ Java, J2EE, and JCP are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.<br/>
+ © 2004, Apache Software Foundation
+ </legal>
+ </footer>
+</document>
Added: incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_building.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_building.xml Wed Nov 10 15:04:32 2004
@@ -0,0 +1,325 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "http://forrest.apache.org/dtd/document-v12.dtd">
+<document>
+ <header>
+ <title>Building a Page Flow Web-App</title>
+ </header>
+ <body>
+
+ <section id="introduction">
+ <title>Introduction</title>
+
+ <p>
+ Now that the theory of Java Page Flows has been explained, you need to know
+ how to concretely put together a web-app that uses JPFs. Beehive ships with
+ a set of Ant buildfiles to make the building of an application much easier.
+ </p>
+
+ </section>
+
+ <section id="source_tree_layout">
+ <title>Source Tree Layout</title>
+
+ <p>
+ The layout of your project may be anywhere on your local disk. We assume
+ that the environment variable $WEBAPP_DIR points to the top-level of your
+ application.
+ </p>
+
+ <ul>
+ <li><code>$WEBAPP_DIR/</code>
+ <ul>
+ <li><code>Controller.jpf</code></li>
+ <li><code>index.jsp</code></li>
+ <li><code>login.jsp</code></li>
+ <li><code>signup.jsp</code></li>
+ <li><code>mypage.jsp</code></li>
+ <li><code>resources/</code></li>
+ <li><code>WEB-INF/</code>
+ <ul>
+ <li><code>src/</code></li>
+ <li><code>classes/</code></li>
+ <li><code>lib/</code></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ <section id="top_level">
+ <title><code>$WEBAPP_DIR/</code></title>
+
+ <p>
+ The top-level of the web-app, at <code>$WEBAPP_DIR</code> should contain
+ your JSP pages and a <code>Controller.jpf</code>. When built, the
+ <code>Controller.jpf</code> will be compiled to <code>WEB-INF/classes/Controller.jpf</code>.
+ </p>
+
+
+ </section>
+
+ <section id="web-inf">
+ <title><code>$WEBAPP_DIR/WEB-INF/</code></title>
+
+ <p>
+ The <code>$WEBAPP_DIR/WEB-INF/</code> directory is just as it is with any other servlet-based
+ application.
+ </p>
+
+ </section>
+
+ <section id="web-inf_src">
+ <title><code>$WEBAPP_DIR/WEB-INF/src/</code></title>
+
+ <p>
+ The <code>$WEBAPP_DIR/WEB-INF/src/</code> directory contains any other application
+ source files that need to be compiled into Java classes. They will be compiled
+ to <code>$WEBAPP_DIR/WEB-INF/classes/</code>. Additionally, any extra <code>.properties</code>
+ or <code>.xml</code> files that need to be deployed with your application will be copied
+ from the <code>src/</code> directory to the <code>classes/</code> directory during the build.
+ </p>
+
+ </section>
+
+ <section id="web-inf_lib">
+ <title><code>$WEBAPP_DIR/WEB-INF/lib/</code></title>
+
+ <p>
+ As with any other web application, the <code>$WEBAPP_DIR/WEB-INF/lib/</code> directory
+ should contain the jars for each dependency of your application, including those
+ required by Beehive itself. The jars required by Beehive are listed below.
+ </p>
+
+ <table>
+ <tr>
+ <th>Project</th>
+ <th>Jar</th>
+ <th>Version</th>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-controls.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-netui-compiler.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-netui-pageflow.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-netuid-scoping.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-netui-tags-databinding.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-netui-tags-html.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-netuid-template.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-tomcat-common-4x.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-tomcat-server-4x.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-tomcat-webapp-4x.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>Beehive</td>
+ <td>beehive-netui-util.jar</td>
+ <td><em>distribution</em></td>
+ </tr>
+ <tr>
+ <td>CGLib</td>
+ <td>cglib-full.jar</td>
+ <td>2.0.1</td>
+ </tr>
+ <tr>
+ <td>Jakarta Commons</td>
+ <td>commons-beanutils</td>
+ <td>1.7.0</td>
+ </tr>
+ <tr>
+ <td>Jakarta Commons</td>
+ <td>commons-collections.jar</td>
+ <td>3.0</td>
+ </tr>
+ <tr>
+ <td>Jakarta Commons</td>
+ <td>commons-digester</td>
+ <td>1.6</td>
+ </tr>
+ <tr>
+ <td>Jakarta Commons</td>
+ <td>commons-lang.jar</td>
+ <td>1.0.1</td>
+ </tr>
+ <tr>
+ <td>Jakarta Commons</td>
+ <td>commons-logging.jar</td>
+ <td>1.0.3</td>
+ </tr>
+ <tr>
+ <td>EHCache</td>
+ <td>echache.jar</td>
+ <td>0.7</td>
+ </tr>
+ <tr>
+ <td>Geronimo</td>
+ <td>geronimo-spec-jta.jar</td>
+ <td>DEV</td>
+ </tr>
+ <tr>
+ <td>HSQLDB</td>
+ <td>hsqldb.jar</td>
+ <td>1.7.2.2</td>
+ </tr>
+ <tr>
+ <td>JSTL</td>
+ <td>jstl.jar</td>
+ <td>1.1.1</td>
+ </tr>
+ <tr>
+ <td>Log4J</td>
+ <td>log4j.jar</td>
+ <td>1.2.8</td>
+ </tr>
+ <tr>
+ <td>Servlet API</td>
+ <td>servletapi.jar</td>
+ <td>2.4</td>
+ </tr>
+ <tr>
+ <td>JSTL <strong>is this right?</strong></td>
+ <td>standard.jar</td>
+ <td>1.1.1</td>
+ </tr>
+ <tr>
+ <td>StAX</td>
+ <td>stax.jar</td>
+ <td>1.1.1-dev</td>
+ </tr>
+ <tr>
+ <td>StAX</td>
+ <td>stax-api.jar</td>
+ <td>1.0</td>
+ </tr>
+ <tr>
+ <td>Struts</td>
+ <td>struts.jar</td>
+ <td>1.1</td>
+ </tr>
+ <tr>
+ <td>XMLBeans</td>
+ <td>xmlbeans.jar</td>
+ <td>2.0-dev-2</td>
+ </tr>
+ </table>
+
+ </section>
+
+ </section>
+
+ <section id="running_ant">
+ <title>Running Ant</title>
+
+ <p>
+ Before you can build the web-app using ant, you must ensure that the <code>BEEHIVE_HOME</code>
+ and <code>CATALINA_HOME</code> variables are set correctly, along with <code>WEBAPP_DIR</code>.
+ </p>
+
+ <table>
+ <tr>
+ <th>Variable</th>
+ <th>Value</th>
+ </tr>
+ <tr>
+ <td>BEEHIVE_HOME</td>
+ <td>Top level of the Beehive distribution</td>
+ </tr>
+ <tr>
+ <td>CATALINE_HOME</td>
+ <td>Top level of the installed Tomcat server</td>
+ </tr>
+ <tr>
+ <td>WEBAPP_DIR</td>
+ <td>Top level of the web-app to be built</td>
+ </tr>
+ </table>
+
+ <p>
+ Once these variables are set correctly, building the deployable web-app
+ requires a single ant invocation using the build file at <code>$BEEHIVE_HOME/ant/buildWebapp.xml</code>.
+ This build-file is invoked using ant's <code>-f <buildfile-path></code> option.
+ The directory of the web-app is passed on the commandline using the <code>-Dname=value</code>
+ functionality of ant. Finally, the <code>build.webapp</code> target is invoked.
+ </p>
+
+<source>
+ant -f $BEEHIVE_HOME/ant/buildWebapp.xml -Dwebapp.dir=$WEBAPP_DIR build.webapp
+</source>
+
+ </section>
+
+ <section id="deploying">
+ <title>Deploying the Web-app</title>
+
+ <p>
+ The easiest way to deploy the web-app is to create a symlink/shortcut from
+ $WEBAPP_DIR to $CATALINA_HOME/webapps. Another way would be to simply copy
+ $WEBAPP_DIR to $CATALINE_HOME/webapps.
+ </p>
+
+<source>
+ln -s $WEBAPP_DIR $CATALINE_HOME/webapps
+</source>
+
+<source>
+cp -R $WEBAPP_DIR $CATALINE_HOME/webapps
+</source>
+
+ </section>
+
+ <section id="next">
+ <title>Next...</title>
+
+ <p>
+ Now that you've built and deployed an application, you can see how easy it is to modify
+ the flow between pages, adding and removing pages.
+ </p>
+
+ <ul>
+ <li><link href="pageflow_altering.html">Altering a Page Flow</link></li>
+ </ul>
+ </section>
+
+ </body>
+ <footer>
+ <legal>
+ Java, J2EE, and JCP are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.<br/>
+ © 2004, Apache Software Foundation
+ </legal>
+ </footer>
+</document>
Added: incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_controllers.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_controllers.xml Wed Nov 10 15:04:32 2004
@@ -0,0 +1,493 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "http://forrest.apache.org/dtd/document-v12.dtd">
+<document>
+ <header>
+ <title>Page Flow Controllers</title>
+ </header>
+ <body>
+
+ <section id="introduction">
+ <title>Introduction</title>
+
+ <p>
+ As introduced in the <link href="pageflow_overview.html">Page Flow Overview</link>, the
+ following model will be used.
+ </p>
+
+ <p>
+ <img src="images/impl-flow-1.png" alt="implementation page flow"/>
+ </p>
+
+ </section>
+
+ <section id="starting_the_controller">
+ <title>Starting the Controller</title>
+
+ <p>
+ The first step to writing a controller is to simply create a new basic class
+ named <code>Controller.jpf</code>. The <code>jpf</code> extension alerts the
+ build that this class is a special JPF controller class, instead of a typical
+ Java class.
+ </p>
+
+<source>
+<strong>public class Controller
+{
+}</strong>
+</source>
+
+ <p>
+ Just as the <code>.jpf</code> extension denotes a special Java class, controllers
+ also must subclass <code>org.apache.beehive.netui.pageflow.PageFlowController</code>
+ </p>
+
+<source>
+<strong>import org.apache.beehive.netui.pageflow.PageFlowController;</strong>
+
+public class Controller
+ <strong>extends PageFlowController</strong>
+{
+}
+</source>
+
+ <p>
+ Additionally, Beehive weaves magic into controller classes using annotations.
+ The <code>Jpf.Controller</code> annotation is a required marker on your
+ own controller class.
+ </p>
+
+<source>
+import org.apache.beehive.netui.pageflow.PageFlowController;
+<strong>import org.apache.beehive.netui.pageflow.annotations.Jpf;</strong>
+
+<strong>@Jpf.Controller</strong>
+public class Controller
+ extends PageFlowController
+{
+}
+</source>
+
+ <p>
+ Now we have the beginnings of a controller implementation.
+ </p>
+
+ </section>
+
+ <section id="fleshing_out_the_controller">
+ <title>Fleshing Out the Controller</title>
+
+ <p>
+ Now that the boilerplate <code>Controller.jpf</code> is in place, we can begin
+ to define the methods that intercept navigation and perform the necessary logic
+ to determine which JSP page should actually be displayed. In the above
+ model, these are:
+ </p>
+
+ <ul>
+ <li><code>signUp()</code></li>
+ <li><code>login()</code></li>
+ <li><code>myPage()</code></li>
+ </ul>
+
+ <p>
+ For the time being, we are going to ignore the methods that process form input.
+ </p>
+
+ <p>
+ When a controller method completes, it must return an indication of what page to
+ display to the user. This is accomplished by returning a <code>org.apache.beehive.netui.pageflow.Forward</code>
+ object.
+ </p>
+
+<source>
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+ <strong>
+ public Forward signUp()
+ {
+ ...
+ }
+
+ public Forward login()
+ {
+ ...
+ }
+
+ public Forward myPage()
+ {
+ ...
+ }
+ </strong>
+}
+</source>
+
+ <section id="constant_forwards">
+ <title>Constant Forwards</title>
+
+ <p>
+ For the two simple methods of <code>signUp()</code> and <code>login()</code>,
+ there is no special logic to be applied. They should simply return a constant
+ indication to arrive at <code>signup.jsp</code> and <code>login.jsp</code>
+ respectively.
+ </p>
+
+ <p>
+ To help with configuration and to avoid having JSP page
+ names within the body of a controller method, Beehive once
+ again uses annotations. The <code>Jpf.Action</code> and
+ <code>Jpf.Forward</code> annotations are used on each method to
+ build an <strong>name to JSP page paths</strong> mapping. The method
+ then works only in terms of the <strong>id</strong>, and doesn't
+ directly refer to the JSP page path.
+ </p>
+
+ <p>
+ The general form the of <code>Jpf.Action</code>/<code>Jpf.Forward</code> annotations are:
+ </p>
+
+<source>
+@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( <strong>name="...", path="..."</strong> ),
+ @Jpf.Forward( <strong>name="...", path="..."</strong> ),
+ @Jpf.Forward( <strong>name="...", path="..."</strong> ),
+ @Jpf.Forward( <strong>name="...", path="..."</strong> )
+ }
+)
+</source>
+
+ <p>
+ For simple methods that forward to a constant path, only a single <code>Jpf.Forward</code>
+ is needed. By convention, names such as <strong>success</strong> and <strong>failure</strong>
+ are used, but by no means are required. It is good practice, though, to not simply name the
+ forward based upon the JSP page name since doing so would remove some of the decoupling that
+ Beehive applications attempt to achieve.
+ </p>
+
+<source>
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="signup.jsp" );
+ }
+ )</strong>
+ public Forward signUp()
+ {
+ ...
+ }
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="login.jsp" );
+ }
+ )</strong>
+ public Forward login()
+ {
+ ...
+ }
+}
+</source>
+
+ <p>
+ All that is left for these simple constant forward methods is a <code>return</code>
+ statement to return the appropriate <code>Forward</code> object. This is accomplished
+ simply by constructing a new <code>Forward</code> with the appropriate name.
+ </p>
+
+<source>
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="signup.jsp" );
+ }
+ )</strong>
+ public Forward signUp()
+ {
+ <strong>return new Forward( "success" );</strong>
+ }
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="success", path="login.jsp" );
+ }
+ )</strong>
+ public Forward login()
+ {
+ <strong>return new Forward( "success" );</strong>
+ }
+}
+</source>
+
+ </section>
+
+ <section id="conditional_forwards">
+ <title>Conditional Forwards</title>
+
+ <p>
+ The <code>myPage()</code> controller method, unlike <code>signUp()</code> and <code>login()</code>
+ contains logic to determine if the user has already authenicated himself. Unlike the previous two
+ methods, there will be two different <code>Jpf.Forward</code> annotations, and the job of the
+ <code>myPage()</code> method is to figure out which one is appropriate to return.
+ </p>
+
+ <p>
+ We define two forwards named <strong>authenticated</strong> and <strong>not_authenticated</strong>,
+ which are linked to <code>mypage.jsp</code> and <code>login.jsp</code> respectively.
+ In this case, the determination of authentication is performed by checking a <strong>session attribute</strong>
+ to see if the <code>authenticated_user</code> attribute has been set.
+ Only the the <code>myPage()</code> method is displayed below in order to highlight condition forwards.
+ </p>
+
+<source>
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+
+ ...
+ ...
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="authenticated", path="mypage.jsp" );
+ @Jpf.Forward( name="not_authenticated", path="login.jsp" );
+ }
+ )</strong>
+ public Forward myPage()
+ {
+ HttpServletRequest request = getRequest();
+ HttpSession session = request.getSession();
+
+ if ( session.getAttribute( "authenticated_user" ) != null )
+ {
+ return new Forward( "authenticated" );
+ }
+
+ return new Forward( "not_authenticated" );
+ }
+}
+</source>
+
+ <p>
+ You may notice that the body of <code>myPage()</code> has no particular logic regarding
+ the user's "My Page" itself. It simply operates in terms of authentication and generically
+ named <code>Forward</code> objects. This presents a possibility of sharing this logic
+ with other controller methods that are concerned with authentication. For more ideas
+ along these lines, please see <!--<link href="controller_patterns.html">-->Controller Patterns [todo: forthcoming document]<!--</link>-->.
+ </p>
+
+ </section>
+
+ <section id="handling_forms">
+ <title>Handling Forms</title>
+
+ <p>
+ Handling form data works similar to other controller methods. By providing a parameter
+ to the controller method, a populated subclass of <code>org.apache.beehive.netui.pageflow.FormData</code>
+ available. In the above model, controller methods that process forms have been named
+ with the <code>processXXX(..)</code> convention.
+ </p>
+
+ <ul>
+ <li><code>processLogin(...)</code></li>
+ <li><code>processSignUp(...)</code></li>
+ </ul>
+
+ <p>
+ First, define a subclass of <code>FormData</code>. It may be defined as a <code>static</code>
+ class of the controller itself. <code>FormData</code> classes follow normal JavaBean conventions
+ and require no special annotations.
+ </p>
+
+<source>
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+ <strong>public static class LoginForm
+ extends FormData
+ {
+ private String username;
+ private String password;
+
+ public void setUsername(String username)
+ {
+ this.username = username;
+ }
+
+ public String getUsername()
+ {
+ return this.username;
+ }
+
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ public String getPassword()
+ {
+ return this.password;
+ }
+ }</strong>
+
+ ...
+ ...
+
+}
+</source>
+
+ <p>
+ Defining the <code>processLogin(...)</code> method to take a <code>LoginForm</code>
+ parameter is all that is required to have a controller method that can
+ operate upon the submitted form.
+ </p>
+
+<source>
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+ <strong>public static class LoginForm
+ extends FormData
+ {
+ ...
+ ...
+ }</strong>
+
+ ...
+ ...
+
+ <strong>public Forward processLogin(LoginForm form)
+ {
+ ...
+ }</strong>
+}
+</source>
+
+ <p>
+ Once again, <code>processLogin(..)</code> is a conditional forward controller method.
+ If a user has entered a correct username and password, then they should be directed
+ to <code>mypage.jsp</code>, otherwise they will be returned back to the <code>login.jsp</code>
+ for another attempt. Checking username and password is outside of the scope of JPF,
+ and in this example, we rely upon a mythical <code>MyAppUtils</code> class to perform
+ this logic.
+ </p>
+
+<source>
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.FormData;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Jpf.Controller
+public class Controller
+ extends PageFlowController
+{
+ ...
+ ...
+
+ <strong>@Jpf.Action(
+ forwards = {
+ @Jpf.Forward( name="authenticated", path="mypage.jsp" );
+ @Jpf.Forward( name="not_authenticated", path="login.jsp" );
+ }
+ )</strong>
+ public Forward processLogin(LoginForm form)
+ {
+ if ( MyAppUtils.authenticate( form.getUsername(),
+ form.getPassword() ) )
+ {
+ HttpServletRequest request = getRequest();
+ HttpSession session = request.getSession();
+
+ session.setAttribute( "authenticated_user",
+ form.getUsername() );
+
+ return new Forward( "authenticated" );
+ }
+
+ return new Forward( "not_authenticated" );
+ }
+}
+</source>
+
+ <p>
+ Similar implementation would be done for <code>signUp(..)</code>, involving another
+ <code>FormData</code> subclass such as <code>SignUpForm</code>.
+ </p>
+
+ </section>
+
+ </section>
+
+ <section id="next">
+ <title>Next...</title>
+
+ <p>
+ Next, learn about linking this controller class to the JSP pages to allow for
+ the interception to occur.
+ </p>
+
+ <ul>
+ <li><link href="pageflow_jsp.html">Page Flow JSP</link></li>
+ </ul>
+ </section>
+
+
+ </body>
+ <footer>
+ <legal>
+ Java, J2EE, and JCP are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.<br/>
+ © 2004, Apache Software Foundation
+ </legal>
+ </footer>
+</document>
Added: incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_jsp.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_jsp.xml Wed Nov 10 15:04:32 2004
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "http://forrest.apache.org/dtd/document-v12.dtd">
+<document>
+ <header>
+ <title>Page Flow JSP</title>
+ </header>
+ <body>
+
+ <section id="introduction">
+ <title>Introduction</title>
+
+ <p>
+ Continuing with the same model used in previous pages of this documentation set,
+ examples will reference this:
+ </p>
+
+ <p>
+ <img src="images/impl-flow-1.png" alt="implementation flow"/>
+ </p>
+
+ <p>
+ Java Page Flow adds a handful of tag libraries to normal JSP usage to assist with the
+ binding of the JSP pages to the controller class. Of primary importance is the
+ <code>netui/tags-html</code> taglib. Other taglibs provide additional functionality
+ </p>
+
+ </section>
+
+ <section id="starting_a_jpf_jsp">
+ <title>Starting a JPF JSP</title>
+
+ <p>
+ As with <link href="pageflow_controllers.html">Page Flow Controller</link>, a certain amount
+ of common boilerplate text is required in each page. The first two lines should set
+ the content-type, the encoding, and import the base netui tag library. The <code>taglib</code>
+ binds the netui tags to the <code>netui</code> prefix.
+ </p>
+
+<source>
+<strong><%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://beehive.apache.org/netui/tags-html-1.0" prefix="netui"%></strong>
+</source>
+
+ <p>
+ After the common prolog, the JSP page can be written like most any other JSP page,
+ with some tag substitutions occurring:
+ </p>
+
+ <table>
+ <tr>
+ <th>original tag</th><th>replace with</th>
+ </tr>
+ <tr>
+ <td>html</td><td>netui:html</td>
+ </tr>
+ <tr>
+ <td>body</td><td>netui:body</td>
+ </tr>
+ <tr>
+ <td>a</td><td>netui:anchor</td>
+ </tr>
+ <tr>
+ <td>form</td><td>netui:form</td>
+ </tr>
+ <tr>
+ <td><em>various form elements</em></td><td><em>various netui: elements</em> (see <link href="#handling_forms">Handling Forms</link>, below)</td>
+ </tr>
+ </table>
+
+ <p>
+ In addition to the prolog and general tag substitutions, <code><netui:base></code>
+ should be present within the <code><head></code> element. The resulting general
+ form of a JPF-based JSP page is as follows:
+ </p>
+
+<source>
+<strong><%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="http://beehive.apache.org/netui/tags-html-1.0" prefix="netui"%>
+<netui:html></strong>
+ <head>
+ <title>...title>
+ <strong><netui:base/></strong>
+ <head>
+ <strong><netui:body></strong>
+ ..
+ ..
+ ..
+ <strong><netui:body>
+<netui:html></strong>
+</source>
+
+ </section>
+
+ <section id="simple_linking">
+ <title>Simple Linking</title>
+
+ <p>
+ Initially, we will examine simple linking through a controller to another JSP page.
+ The <code><netui:anchor></code> tag replaces the normal <code><a></code>
+ HTML anchor tag. A plain <code><a></code> links directly from one URL to
+ another, without providing the controller an opportunity to perform any conditional
+ logic. The <code><netui:anchor></code> tag will be substituted when the
+ page is display to render the correct HTML and Javascript to cause the link
+ to venture through the controller class.
+ </p>
+
+ <p>
+ While it may seem silly to use JPF/netui functionality for simple
+ <em>constant forward methods</em>, the advantage is that if a page
+ gets renamed or you wish to change the flow through an application,
+ the destination only needs to be changed once, within the controller.
+ Otherwise, you may have to edit a handful of JSP pages manually
+ changing the URLs inside normal <code><a></code> tags.
+ </p>
+
+ <p>
+ For example, if your application changes and you desire to show a
+ terms-of-service before allowing login, you can simply alter the <code>login()</code>
+ controller method to send a user to <code>terms_of_service.jsp</code> before
+ further sending him to the actual login screen.
+ </p>
+
+ <p>
+ The <code><netui:anchor></code> tag parallels the <code><a></code>
+ tag but uses a <code>action</code> attribute instead of an <code>href</code>.
+ Instead of specifying the URL to another page, the name of the method
+ on the controller class is used, without parenthesis.
+ </p>
+
+ <p>
+ Instead of using <code><a></code>
+ </p>
+
+<source>
+<<strong>a href="login.jsp"</strong>>Login!</a>
+</source>
+
+ <p>
+ Use <code><netui:anchor></code>
+ </p>
+
+<source>
+<<strong>netui:anchor action="login"</strong>>Login!</a>
+</source>
+
+ <p>
+ When the link is displayed on-screen, clicking it will cause control to
+ go through the <code>Controller</code>'s <code>login()</code> method,
+ which will return the correct forward to select the actual next page to
+ display.
+ </p>
+
+ </section>
+
+ <section id="handling_forms">
+ <title>Handling Forms</title>
+
+ <p>
+ To connect an on-screen form to the underlying controller's form-handling
+ method, the <code><netui:form></code> container tag, along with
+ specialized tags that replace the normal form elements are used within
+ a JSP page. Similar to how <code><netui:anchor></code> replaces
+ normal HTML <code><a></code> tags, the <code><netui:form></code>
+ tag replaces the typical HTML <code><form></code> tag. Once again,
+ the tag will render the appropriate page so that submission of the form
+ will venture through the named form-handling method of the controller class.
+ </p>
+
+ <p>
+ Instead of using <code><form></code>
+ </p>
+
+<source>
+<<strong>form action="LoginServlet"</strong> method="POST">
+</source>
+
+ <p>
+ Use <code><netui:form></code>
+ </p>
+
+
+<source>
+<<strong>netui:form action="processLogin"</strong> method="POST">
+</source>
+
+ <p>
+ The other tags typically used with a <code><form></code> also have
+ replacements from the netui tag library.
+ </p>
+
+ <table>
+ <tr>
+ <th>original tag</th><th>replace with</th><th><code>FormData</code> datatype</th>
+ </tr>
+ <tr>
+ <td>button</td><td>netui:button</td><td><em>optionally changing the controller form processing method</em></td>
+ </tr>
+ <tr>
+ <td>input type="checkbox"</td><td>netui:checkBox</td><td><code>boolean</code> or <code>java.lang.Boolean</code></td>
+ </tr>
+ <tr>
+ <td>input type="checkbox"</td><td>netui:checkBoxGroup</td><td><code>java.lang.String[]</code></td>
+ </tr>
+ <tr>
+ <td>input type="checkbox"</td><td>netui:checkBoxOption</td><td><em>see <code>netui:checkBoxGroup</code></em></td>
+ </tr>
+ <tr>
+ <td>hidden</td><td>netui:hidden</td><td><code>java.lang.String</code></td>
+ </tr>
+ <tr>
+ <td>input type="radio"</td><td>netui:radioButtonGroup</td><td><code>java.lang.String[]</code></td>
+ </tr>
+ <tr>
+ <td>input type="radio"</td><td>netui:radioButtonOption</td><td><em>see <code>netui:radioButtonGroup</code></em></td>
+ </tr>
+ <tr>
+ <td>input type="radio"</td><td>netui:select</td><td><code>java.lang.String[]</code></td>
+ </tr>
+ <tr>
+ <td>option</td><td>netui:option</td><td>see <code>netui:option</code></td>
+ </tr>
+ <tr>
+ <td>textarea</td><td>netui:textArea</td><td><code>java.lang.String</code></td>
+ </tr>
+ <tr>
+ <td>input (type="text")</td><td>netui:textBox</td><td><code>java.lang.String</code></td>
+ </tr>
+ </table>
+
+ <p>
+ For the <code>processLogin(...)</code> form-processing method, the matching JSP form would be:
+ </p>
+
+<source>
+<strong><netui:form action="processLogin" method="POST">
+ <netui:textBox name="username" size="20"/>
+ <netui:textBox name="username" size="20" password="true"/>
+ <netui:button type="submit" value="Login"/>
+</netui:form></strong>
+</source>
+
+ <p>
+ When the user submits the form by clicking upon the <code>Login</code> button, an instance of
+ the <code>LoginForm</code> subclass of <code>FormData</code> is created and passed to the
+ <code>processLogin(LoginForm form)</code> method of the controller class.
+ </p>
+
+ </section>
+
+ <section id="next">
+ <title>Next...</title>
+
+ <p>
+ Next, learn about how to compile and package up a complete web-app.
+ </p>
+
+ <ul>
+ <li><link href="pageflow_building.html">Building a Page Flow Web-App</link></li>
+ </ul>
+ </section>
+
+
+ </body>
+ <footer>
+ <legal>
+ Java, J2EE, and JCP are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.<br/>
+ © 2004, Apache Software Foundation
+ </legal>
+ </footer>
+</document>
Added: incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_overview.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/site/src/documentation/content/xdocs/pageflow/pageflow_overview.xml Wed Nov 10 15:04:32 2004
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "http://forrest.apache.org/dtd/document-v12.dtd">
+<document>
+ <header>
+ <title>Page Flow Overview</title>
+ </header>
+ <body>
+
+ <section id="introduction">
+ <title>Introduction</title>
+
+ <p>
+ A Java Page Flow (JPF) is a group of Java Server Pages (JSP) and a Java class that
+ controls the user experience flow through an application. In addition to allowing
+ complex logic to dictate which pages are displayed, JPF technology helps decouple
+ page authoring from application logic by preventing one JSP from directly referencing
+ another.
+ </p>
+
+ </section>
+
+ <section id="logical_flow">
+ <title>The Logical Flow</title>
+
+ <p>
+ Writing traditional web applications without JPFs requires a fair amount of
+ logic to be applied within the application's pages. For example, a site
+ that provides a "My Page" functionality for logged in users would have
+ to include logic on the home page to determine if the "My Page" link
+ should take the user to the login form or directly to their customized
+ page.
+ </p>
+
+ <p>
+ Using JPF, the home page of the application would not link directly to
+ either the login page <strong>or</strong> the user's "My Page" location, but rather
+ would point back into Java code that makes the decision.
+ </p>
+
+ <p>
+ For the rest of this overview, the following <strong>logical page flow</strong> wil
+ be used:
+ </p>
+
+ <p>
+ <img src="images/logical-flow-1.png" alt="logical page flow"/>
+ </p>
+
+ <p>
+ This flow supports several routes from the home page of the application
+ to the user's "My Page":
+ </p>
+
+ <ol>
+ <li>
+ <p>
+ <code>index.jsp</code> directly to <code>mypage.jsp</code> if the user is already logged in.
+ </p>
+ </li>
+ <li>
+ <p>
+ <code>index.jsp</code> to <code>login.jsp</code> if the user explicitely selects the 'login' action.
+ After logging in, the user will be automatically taken to <code>mypage.jsp</code>.
+ </p>
+
+ <p>
+ In the event of a login failure, <code>login.jsp</code> will be redisplayed to give them
+ another opportunity to authenticate themselves.
+ </p>
+ </li>
+ <li>
+ <p>
+ If the user desires to register with the site, he can select the action that will
+ take him to <code>signup.jsp</code>. One signed up, the <code>thanks.jsp</code>
+ will be displayed which also allows the user to follow the path outlined in #2
+ above to login.
+ </p>
+ </li>
+ <li>
+ <p>
+ In the event a user has already authenticated himself, he will be allowed to
+ go directly to his "My Page" at <code>mypage.jsp</code>.
+ </p>
+ </li>
+ </ol>
+
+ </section>
+
+ <section id="implementation_of_flow">
+ <title>The Implementation of the Flow</title>
+
+ <p>
+ In the above <strong>logical flow</strong> there are several <em>if</em> statements
+ that cause the user flow to vary depending on their previous actions and other state.
+ </p>
+
+ <ul>
+ <li>
+ <em>If the user is not logged in...</em>
+ </li>
+ <li>
+ <em>If the user is logged in...</em>
+ </li>
+ <li>
+ <em>If the user's login attempt fails...</em>
+ </li>
+ </ul>
+
+ <p>
+ Java Page Flows moves this condition logic out of the JSP pages and into a
+ Java class that controls the movement through the application. This Java class
+ is the <strong>controller</strong> portion of the <strong>Model-View-Controller</strong>
+ (MVC) pattern. This allows a page to be written, for example, that appears
+ to link directly from the home page of the application to the user's "My Page".
+ The <strong>controller</strong> is given the opportunity to intercept the navigation
+ between the two and redirect the user to the login page, if required.
+ </p>
+
+ <p>
+ Each of the interception points is simply a <strong>method</strong> of the
+ particular <strong>controller</strong> class. The method may perform any required
+ complex logic. The return-value of the method dictates which page is then
+ displayed. If a user clicks on the "My Page" link, the method may check if
+ the user is logged in, and if so, return an indication that the <code>mypage.jsp</code>
+ should be displayed, otherwise it will return an indication that
+ <code>login.jsp</code> should be presented to the user.
+ </p>
+
+ <p>
+ With normal HTML pages, each page is linked directly to other pages.
+ </p>
+
+ <ul>
+ <li><strong>page > page > page > page</strong></li>
+ </ul>
+
+ <p>
+ When using JPFs, pages and controller methods are interleaved, transparently.
+ </p>
+
+ <ul>
+ <li><strong>page > method > page > method > page > method > page</strong></li>
+ </ul>
+
+ <p>
+ The above <strong>logical page flow</strong> can be redrawn with JPF controller methods
+ in mind, as:
+ </p>
+
+ <p>
+ <img src="images/impl-flow-1.png" alt="implementation page flow"/>
+ </p>
+
+ <p>
+ Now it is apparent that to navigation from <code>index.jsp</code> to <code>mypage.jsp</code>,
+ the user traverses across the <code>myPage()</code> method. This method performs the necessary
+ check to determine if the user has already been authenticated. If the user has logged in already,
+ it will direct the user straight to <code>mypage.jsp</code>, otherwise, it displays <code>login.jsp</code>.
+ </p>
+
+ </section>
+
+ <section id="next">
+ <title>Next...</title>
+
+ <p>
+ Next, learn about writing a <strong>controller</strong> class with methods.
+ </p>
+
+ <ul>
+ <li><link href="pageflow_controllers.html">Page Flow Controller</link></li>
+ </ul>
+ </section>
+
+
+
+ </body>
+ <footer>
+ <legal>
+ Java, J2EE, and JCP are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.<br/>
+ © 2004, Apache Software Foundation
+ </legal>
+ </footer>
+</document>